我正在编写 python2.7.15 代码来访问单词内的字符。我如何优化这个过程,以便检查每个单词是否都包含在外部列表中?
我尝试了两个版本的 python2 代码:版本(1)是我的代码必须执行的操作的扩展版本,而在版本(2)中我尝试了相同代码的紧凑版本。
chars_array = ['a','b','c']
VERSION (1)
def version1(word):
chars =[x for x in word]
count = 0
for c in chars:
if not c in chars_array:
count+=1
return count
VERSION (2)
def version2(word):
return sum([1 for c in [x for x in word] if not c in chars_array])
我正在分析一个大型语料库,对于版本 1,我获得的执行时间为 8.56 秒,而对于版本 2,执行时间为 8.12 秒。
最佳答案
最快的解决方案(对于极长的字符串,速度最多可快 100 倍):
joined = ''.join(chars_array)
def version3(word):
return len(word.translate(None, joined))
另一个较慢的解决方案,其速度与您的代码大致相同:
from itertools import ifilterfalse
def version4(word):
return sum(1 for _ in ifilterfalse(set(chars_array).__contains__, word))
计时(s
是随机字符串):
In [17]: %timeit version1(s)
1000 loops, best of 3: 79.9 µs per loop
In [18]: %timeit version2(s)
10000 loops, best of 3: 98.1 µs per loop
In [19]: %timeit version3(s)
100000 loops, best of 3: 4.12 µs per loop # <- fastest
In [20]: %timeit version4(s)
10000 loops, best of 3: 84.3 µs per loop
关于python - 优化执行时间以检查单词的字符是否在Python列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54331928/