ホームページ >バックエンド開発 >Python チュートリアル >Python で文字列から句読点を削除する最も効率的な方法は何ですか?

Python で文字列から句読点を削除する最も効率的な方法は何ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-26 06:30:27187ブラウズ

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

文字列から句読点を削除する: 最適なアプローチ

文字列から句読点を削除することは、多くのプログラミング シナリオで一般的なタスクです。さまざまな方法が存在しますが、最も効率的な方法を選択するのは難しい場合があります。

比類のない効率: 文字列変換

効率を最大化するには、文字列変換が最も重要です。 s.translate(None, string.punctuation) を使用すると、生の文字列操作が C で実行され、比類のない速度が実現します。 Python バージョン 3.9 以降の場合は、s.translate(str.maketrans('', '', string.punctuation)) を利用します。

パフォーマンスが低下する重大なシナリオに対する代替アプローチ

速度は最重要ではありません。次の代替案を検討してください:

  • Set除外: 句読点文字のセットを作成し、集合内包表記を使用して文字列からそれらを除外します (例: ''.join(ch for ch in s if ch not in exclude))。
  • 正規表現: 正規表現を使用して句読点文字を照合および削除します (例: 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。