我想从字符串中删除任何括号。为什么这不能正常工作?

>>> 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不是最易读的代码。其他三个更为明显,尽管程度有所不同。

关于python - Python strip()多个字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3900054/

10-12 16:37
查看更多