>백엔드 개발 >파이썬 튜토리얼 >Python에서 문자열의 구두점을 제거하는 가장 효율적인 방법은 무엇입니까?

Python에서 문자열의 구두점을 제거하는 가장 효율적인 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-26 06:30:27185검색

What's the Most Efficient Way to Remove Punctuation from Strings in Python?

문자열에서 구두점 제거: 최적의 접근 방식

문자열에서 구두점을 제거하는 것은 많은 프로그래밍 시나리오에서 일반적인 작업입니다. 다양한 방법이 존재하지만 가장 효율적인 방법을 선택하는 것은 어려울 수 있습니다.

비할 데 없는 효율성: 문자열 번역

최대 효율성을 위해서는 문자열 번역이 가장 중요합니다. s.translate(None, string.punkation)을 사용하면 원시 문자열 작업이 C에서 수행되어 비교할 수 없는 속도를 제공합니다. Python 버전 3.9 이상의 경우 s.translate(str.maketrans('', '', string.tempoation))를 활용하세요.

성능이 좋지 않은 중요한 시나리오에 대한 대체 접근 방식

속도가 빠른 경우 가장 중요한 것은 아니지만 다음 대안을 고려하십시오.

  • 설정 제외: 구두점 문자 집합을 생성하고 집합 이해를 사용하여 문자열에서 이를 제외합니다(예: ''.join(ch for ch in s if ch not in 제외)).
  • 정규식: 정규식을 활용하여 구두점 문자를 일치시키고 제거합니다(예: regex.sub('', s), 여기서 regex는 미리 컴파일된 정규식입니다).

성능 비교

이러한 메서드의 성능을 측정하기 위해 다음 코드가 실행되었습니다.

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)

결과는 다음과 같습니다.

  • 문자열 번역: 2.12455511093초
  • 정규식: 6.86155414581초
  • 제외 설정: 19.8566138744초
  • 문자 대체: 28.4436721802 초

결론

속도를 최적화할 때 문자열 번역은 확실한 선택입니다. 성능 집약도가 낮은 시나리오의 경우 집합 제외 또는 정규식과 같은 대체 접근 방식을 사용하면 만족스러운 결과를 얻을 수 있습니다.

위 내용은 Python에서 문자열의 구두점을 제거하는 가장 효율적인 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.