1. ホーム
  2. python

[解決済み] Python strip() は複数文字?

2023-06-14 16:26:06

質問

文字列から任意の括弧を削除したい。なぜ正しく動作しないのでしょうか?

>>> name = "Barack (of Washington)"
>>> name = name.strip("(){}<>")
>>> print name
Barack (of Washington

どのように解決するのですか?

私はここで、各メソッドをループで100000回使用するタイムテストを行いました。 その結果、私は驚きました。 (コメントでの正当な批判に応えて編集した後も、結果は私を驚かせています)。

これがそのスクリプトです。

import timeit

bad_chars = '(){}<>'

setup = """import re
import string
s = 'Barack (of Washington)'
bad_chars = '(){}<>'
rgx = re.compile('[%s]' % bad_chars)"""

timer = timeit.Timer('o = "".join(c for c in s if c not in bad_chars)', setup=setup)
print "List comprehension: ",  timer.timeit(100000)


timer = timeit.Timer("o= rgx.sub('', s)", setup=setup)
print "Regular expression: ", timer.timeit(100000)

timer = timeit.Timer('for c in bad_chars: s = s.replace(c, "")', setup=setup)
print "Replace in loop: ", timer.timeit(100000)

timer = timeit.Timer('s.translate(string.maketrans("", "", ), bad_chars)', setup=setup)
print "string.translate: ", timer.timeit(100000)

以下はその結果です。

List comprehension:  0.631745100021
Regular expression:  0.155561923981
Replace in loop:  0.235936164856
string.translate:  0.0965719223022

他の実行結果も同じようなパターンになります。 しかし、もしスピードが第一の関心事でないなら、私はやはり string.translate は最も読みやすいとは言えません。他の 3 つは、程度の差こそあれ、より明白です。