Her*_*ari 2 python string performance python-2.7
我目前正在从在线课程学习Python 2.7.其中一个问题是我必须从字符列表中删除字符串中的字符.
我做的是:
def getAvailableLetters(letters):
alphabet = string.ascii_lowercase
reduced_alphabet = ''
for char in alphabet:
if char not in lettersGuessed:
reduced_alphabet += char
return reduced_alphabet
Run Code Online (Sandbox Code Playgroud)
我已经知道没有字符串方法可以直接从字符串中删除字符串,因为它们是不可变的,所以我想出了这个.我已经成功地提交了一个正确的答案,但我对此并不十分满意,因为我觉得有一种更有效的方法.
最快的方法是在str.translate这里使用:
>>> lettersGuessed = ['a', 'b', 'c']
>>> 'wedqwdasdasccdshjasdcas'.translate(None, ''.join(lettersGuessed))
'wedqwdsdsdshjsds'
Run Code Online (Sandbox Code Playgroud)
如果lettersGuessed已经是字符串,则删除该''.join调用.
时间结果与@thefourtheye的解决方案相比较,str.join并且filter取自:
def getAvailableLetters2(lettersGuessed):
return string.ascii_lowercase.translate(None, lettersGuessed)
from timeit import timeit
print 'filter-->', timeit("getAvailableLetters('Welcome')", setup="from __main__ import getAvailableLetters")
print '.join-->', timeit("getAvailableLetters1('Welcome')",setup="from __main__ import getAvailableLetters1")
print 'trans-->', timeit("getAvailableLetters2('Welcome')",setup="from __main__ import getAvailableLetters2")
Run Code Online (Sandbox Code Playgroud)
输出:
filter--> 6.49355100548
.join--> 4.02496357229
trans--> 0.69938109531
Run Code Online (Sandbox Code Playgroud)