2014-10-12 103 views
-9

在我的项目,它知道,如果'for'vs.'in' - 哪个更快?</p> <pre><code>if "foo" in a_list: do stuff </code></pre> <p>它是:

for i in a_list: 
    if i == "foo": 
     do stuff 
     break 

比慢很多很重要?

+7

好吧,显然你使用'in'的例子比较快:一旦找到物品,你甚至不会通过'断开'循环来短路。当您发生类似的大规模高级错误时,无需担心低级别的性能指标。 – 2014-10-12 12:26:30

+0

根据您提供的信息,没有人会使用第一种方法,因为第二种方法更短,更快,更易于阅读。 – Daniel 2014-10-12 12:29:51

+2

这两个代码片段不会做同样的事情,除非在'a_list'中只会有零个或一个''foo'。 – jonrsharpe 2014-10-12 12:32:19

回答

-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 

太糟糕了。

4

首先,任何性能问题最好通过实际测量代码来回答。使用timeit或分析器来查看哪个选项更快。其次,在你的两个代码示例中,if会更快,因为他们正在做同样的工作,但在if中,工作是在C中完成的,而在for中,它是用Python完成的。 (假设你在循环版本中添加中断,以便在找到元素时停止)。第三,如果你关心速度,也许你根本不想要一个列表,但是一组。要在列表中查找元素,必须依次检查每个元素,这是一个O(n)操作(如果列表长度加倍,则操作时间会加倍)。在一个集合中,它是O(1),无论该集合有多大,找到一个元素都需要相同的时间量。

相关问题