python - 优化执行时间以检查单词的字符是否在Python列表中

标签 python python-2.7 execution-time

我正在编写 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/

相关文章:

python - 在 Django 中实现多个(复选框)选择 + "Other"小部件

python - 如何将 python 连接到使用 docker 运行的 cassandra

python - 如何在 Python 中仅在程序退出临界区后处理 SIGTERM?

java - JUnit:测试计算速度

c++ - AND 运算符 + 加法比减法快

python - python 中的 for 循环用于对数刻度增量

python - 如何使用 .replace() 函数将字符串的最后 4 个字符以外的所有字符更改为 # 符号?

linux - 如何为python项目制作可执行文件

python - Tkinter:根据关键字突出显示/着色特定的文本行

c++ - 简单 C++ 'Hello World' 程序执行时间长