文字列から句読点を削除することは、多くのプログラミング シナリオで一般的なタスクです。さまざまな方法が存在しますが、最も効率的な方法を選択するのは難しい場合があります。
効率を最大化するには、文字列変換が最も重要です。 s.translate(None, string.punctuation) を使用すると、生の文字列操作が C で実行され、比類のない速度が実現します。 Python バージョン 3.9 以降の場合は、s.translate(str.maketrans('', '', string.punctuation)) を利用します。
速度は最重要ではありません。次の代替案を検討してください:
これらのメソッドのパフォーマンスを測定するために、次のコードを作成しました。実行:
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)
結果により、以下:
速度を最適化する場合、文字列変換は議論の余地のない選択です。パフォーマンスの負荷が低いシナリオの場合は、セットの除外や正規表現などの代替アプローチで満足のいく結果が得られる可能性があります。
以上がPython で文字列から句読点を削除する最も効率的な方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。