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

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

DDD
リリース: 2024-12-22 01:30:22
オリジナル
219 人が閲覧しました

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

文字列から句読点を削除する最良の方法

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)
ログイン後にコピー

結果次のことを示します:

  • セットベースのアプローチは、正規表現や文字列よりも効率が低くなります。 translation.
  • string.translate は、set メソッドと正規表現メソッドの両方よりも優れています。
  • replace メソッドが最も遅いです。

したがって、句読点を効率的に削除するには、 s.translate(None, string.punctuation) (Python の以前のバージョンの場合) またはs.translate(str.maketrans('', '', string.punctuation)) (Python の上位バージョンの場合) code.

以上がPython で文字列から句読点を削除する最も効率的な方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート