2014-10-12 101 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),無論該集合有多大,找到一個元素都需要相同的時間量。

相關問題