'for'与'in' - 哪个更快?

时间:2014-10-12 12:23:14

标签: python performance if-statement for-loop

在我的项目中,知道是否

非常重要
for i in a_list:
    if i == "foo":
        do stuff
        break

慢得多:

if "foo" in a_list:
    do stuff
是吗?

2 个答案:

答案 0 :(得分:4)

首先,通过实际测量代码可以最好地回答任何性能问题。使用timeit或profiler查看哪个选项更快。

其次,在你的两个代码示例中,if会更快,因为它们正在做同样的工作,但是在if中,工作是在C中完成的,而在for中,它是在Python中完成的。 (假设您在循环版本中添加了中断,以便在找到元素时停止。)

第三,如果你担心速度,也许你根本不想要一个列表,而是一套。要在列表中查找元素,您必须依次检查每个元素,这是一个O(n)操作(如果列表的长度加倍,操作将在时间上加倍)。在一个集合中,它是O(1),无论集合有多大,找到一个元素都需要相同的时间。

答案 1 :(得分:-3)

是的。

以下是我的测试结果:

test_list = [i for i in range(10000000)]

cProfile.run("if 9999999 in test_list: pass")
[...] total time: 0.152s

cProfile.run("for i in test_list: \n if i==9999999: pass"
[...] total time: 0.555s

太糟糕了。