PS C:\python33> .\python.exe lib\timeit.py -s @"
s = 'Hello, my name is [lol] bob [not[really]] john[son]'
"@ @"
for x in frozenset(s)-frozenset('[]'):
s = s.replace(x, '')
"@
1000000 loops, best of 3: 0.844 usec per loop
PS C:\python33> .\python.exe lib\timeit.py -s @"
s = 'Hello, my name is [lol] bob [not[really]] john[son]'
"@ "''.join(c for c in s if c in '[]')"
100000 loops, best of 3: 4.79 usec per loop
PS C:\python33> .\python.exe lib\timeit.py -s @"
s = 'Hello, my name is [lol] bob [not[really]] john[son]'
"@ @"
s.translate(str.maketrans('','',''.join(set(s)-set('[]'))))
"@
100000 loops, best of 3: 8.5 usec per loop
PS C:\python33> .\python.exe lib\timeit.py -s @"
s = 'Hello, my name is [lol] bob [not[really]] john[son]'
"@ "''.join(filter(lambda x: x in '[]', s))"
100000 loops, best of 3: 9.67 usec per loop
PS C:\python33> .\python.exe lib\timeit.py -s @"
s = 'Hello, my name is [lol] bob [not[really]] john[son]'
import re
"@ "re.sub('[^][]', '', s)"
100000 loops, best of 3: 15.9 usec per loop
s = 'Hello, my name is [lol] bob [not[really]] john[son]'*1000
我得到的时间是:
10000 loops, best of 3: 190 usec per loop
100 loops, best of 3: 3.6 msec per loop
100 loops, best of 3: 4.25 msec per loop
100 loops, best of 3: 8.72 msec per loop
100 loops, best of 3: 7.13 msec per loop
当对答案有疑问时,值得尝试一些方法并确定时间:
因此@guess现在在要删除的字符集上使用
s.replace()
删除的答案似乎是最快的,而正则表达式替换是最慢的(但这是python3.3和我的机器,其他的可能不同)。你知道吗另请注意,如果将上述所有设置字符串替换为:
我得到的时间是:
因此
re.sub
比lambda
解的伸缩性更好,但其他解保持在相同的相对位置。你知道吗您可以使用^{} :
输出:
使用
lambda
和filter
只是另一种方法,但我发现它更漂亮。你知道吗相关问题 更多 >
编程相关推荐