与此帖子相关:If in List vs For loop (performance)
在定时执行时,test1()的速度至少是test2()的两倍。 test2()中的行较少。是因为这个吗?除此之外,它也是“ Python化”的做事方式。 'in'是否比类似的循环结构更有效率?出于性能原因,列表和dict检查是否应该优先于循环?
import timeit
a = [n for n in range(1, 1000)]
s = a[len(a) - 1]
def test1():
for i in a:
if i == s:
break
def test2():
if s in a:
pass
if __name__ == '__main__':
n = 10000
print("test1 milli-sec per loop: ", timeit.timeit("test1()",
setup="from __main__ import test1", number=n) / n * 1000)
print("test2 milli-sec per loop: ", timeit.timeit("test2()",
setup="from __main__ import test2", number=n) / n * 1000)
答案 0 :(得分:1)
这两个正在执行的代码本质上是完全相同的,但有一个主要区别:in
将循环推到C级(假设使用CPython),而第二个循环显然是Python。
C的执行速度明显快于Python,从而为您带来了性能差异。通常,如果只想检查成员资格(True
或False
),请使用第一个选项,但是如果您想做更复杂的事情,例如获取索引(使用{ {1}})并执行进一步的操作,请使用第二个。对于小清单,时间差很小,您可以自由使用任何一种形式。