为什么“in”生成器比python中的“in”列表快得多

Yuh*_*ang 0 python list generator python-3.x

例子:

from timeit import timeit

print(timeit("5 in [i for i in range(0, 100)]"))
print(timeit("5 in map(int, range(0, 100))"))
Run Code Online (Sandbox Code Playgroud)

这是结果:

3.771566713000084
0.9066896029999043
Run Code Online (Sandbox Code Playgroud)

python 3.8.5(我也认为这没有提到python版本^_^)

Sha*_*ger 7

inmap(这是一个迭代,而不是一个发电机,从技术上讲,发电机是使用函数yield或发电机表达式,而且他们更广泛的类的迭代器的子集)的短路,只要它知道的结果是True,使它实际上只生成并检查六个值,然后立即返回True。该list理解,相反,必须产生整个list检查它们中的任何前100种元素的。

如果您的测试是针对不在所讨论的可迭代对象中的元素,则map获胜(如果有的话)(毫无意义的调用会int损害它,性能方面)会更小,但是当可迭代对象包含该元素时,它是在可迭代的早期,即使每个元素的生产成本更高,短路也明显更快,因为它产生的元素少得多。