文字列から句読点を削除する最良の方法
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.punctuation) (Python の以前のバージョンの場合) またはs.translate(str.maketrans('', '', string.punctuation)) (Python の上位バージョンの場合) code.
以上がPython で文字列から句読点を削除する最も効率的な方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。