문자열에서 구두점을 제거하는 가장 좋은 방법
Python에서 문자열에서 구두점을 제거하려고 할 때 다음 접근 방식을 활용할 수 있습니다.
import string s = "string. With. Punctuation?" # Sample string out = s.translate(string.maketrans("",""), string.punctuation)
그러나 이 방법은 지나치게 복잡해 보일 수 있습니다. 더 간단한 솔루션이 있습니까?
효율성 관점
최적의 효율성을 위해서는 이를 능가하기 어렵습니다.
s.translate(None, string.punctuation)
이 코드는 C의 원시 문자열을 활용합니다. 조회 테이블을 사용한 작업으로 고도로 최적화된
대체 접근 방식
속도가 주요 관심사가 아닌 경우 다음 대안을 고려하십시오.
exclude = set(string.punctuation) s = ''.join(ch for ch in s if ch not in exclude)
이 옵션은 다음을 사용하는 것보다 빠릅니다. s.replace는 각 문자에 대해 수행되지만 다음과 같은 비순수 Python 접근 방식에서는 여전히 성능이 뛰어납니다. string.translate.
타이밍 분석
이러한 방법의 성능을 비교하기 위해 다음 타이밍 코드가 사용됩니다.
import re, string, timeit s = "string. With. Punctuation" exclude = set(string.punctuation) table = string.maketrans("","") regex = re.compile('[%s]' % re.escape(string.punctuation)) def test_set(s): return ''.join(ch for ch in s if ch not in exclude) def test_re(s): return regex.sub('', s) def test_trans(s): return s.translate(table, string.punctuation) def test_repl(s): for c in string.punctuation: s=s.replace(c,"") return s print "sets :",timeit.Timer('f(s)', 'from __main__ import s,test_set as f').timeit(1000000) print "regex :",timeit.Timer('f(s)', 'from __main__ import s,test_re as f').timeit(1000000) print "translate :",timeit.Timer('f(s)', 'from __main__ import s,test_trans as f').timeit(1000000) print "replace :",timeit.Timer('f(s)', 'from __main__ import s,test_repl as f').timeit(1000000)
결과 다음을 나타냅니다.
따라서 효율적인 구두점 제거를 위해 s.translate(None, string.tempoation) (낮은 Python 버전의 경우) 또는 s.translate(str.maketrans('', '', 문자열.구두점)) (상위 Python 버전의 경우) 코드.
위 내용은 Python의 문자열에서 구두점을 제거하는 가장 효율적인 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!