반응형
질문
파이썬을 사용하여 문자열에서 모든 영숫자가 아닌 문자를 제거하는 가장 좋은 방법은 무엇인가요?
이 질문의 PHP 버전에서 제시된 해결책들은 약간의 조정을 거치면 작동할 것 같지만, '파이썬 다운' 느낌이 들지 않습니다.
기록을 위해, 저는 마침표와 쉼표(및 기타 구두점)뿐만 아니라 따옴표, 괄호 등도 제거하려고 합니다.
답변
저는 그냥 호기심으로 몇 가지 함수를 시간 측정해 보았습니다. 이 테스트에서는 내장된 string
모듈의 string.printable
에서 비알파벳 및 숫자가 아닌 문자를 제거합니다. '[\W_]+'
와 pattern.sub('', str)
의 사용이 가장 빠르다는 것을 알게 되었습니다.
$ python -m timeit -s \
"import string" \
"''.join(ch for ch in string.printable if ch.isalnum())"
3회 중 최적: 57.6 마이크로초 당 반복
$ python -m timeit -s \
"import string" \
"filter(str.isalnum, string.printable)"
3회 중 최적: 37.9 마이크로초 당 반복
$ python -m timeit -s \
"import re, string" \
"re.sub('[\W_]', '', string.printable)"
3회 중 최적: 27.5 마이크로초 당 반복
$ python -m timeit -s \
"import re, string" \
"re.sub('[\W_]+', '', string.printable)"
3회 중 최적: 15 마이크로초 당 반복
$ python -m timeit -s \
"import re, string; pattern = re.compile('[\W_]+')" \
"pattern.sub('', string.printable)"
3회 중 최적: 11.2 마이크로초 당 반복
반응형
댓글