在我的项目中,知道是否
非常重要for i in a_list:
if i == "foo":
do stuff
break
慢得多:
if "foo" in a_list:
do stuff
是吗?
答案 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
太糟糕了。