[英]Difference between two “contains” operations for python lists
我是python的新手,發現我需要查詢列表是否包含某個項目。
我在各種網站上看到的大多數帖子(包括類似的stackoverflow問題 )都提出了類似的建議
for i in list
if i == thingIAmLookingFor
return True
但是,我也從一個單獨的論壇中找到了
if thingIAmLookingFor in list
# do work
作品。
我想知道if thing in list
方法中的if thing in list
是否為for i in list
方法的簡寫,或者是否以不同方式實現。
如果有的話,我也希望哪一個更受歡迎。
“if in in thing:”格式是首選格式,不僅因為它占用的代碼較少,而且還適用於其他數據類型,並且(對我而言)更易於閱讀。
我不確定它是如何實現的,但我希望它在以更易搜索的形式存儲的數據類型上效率更高。 例如。 集或字典鍵。
if thing in somelist
的if thing in somelist
是首選且最快的方式。
使用in-operator轉換為somelist.__contains__(thing)
其實現等同於: any((x is thing or x == thing) for x in somelist)
。
注意條件測試身份然后是相等。
for i in list
if i == thingIAmLookingFor
return True
以上是測試一個項目是否存在於集合中的可怕方法。 它從函數返回 True
,因此如果您需要將測試作為某些代碼的一部分,則需要將其移動到單獨的實用程序函數中,或者在循環之前添加thingWasFound = False
並在if語句中將其設置為True
(和然后打破),其中任何一行都是幾行樣板,可以是一個簡單的表達式。
另外,如果您只是thingIAmLookingFor in list
使用thingIAmLookingFor in list
,則可以通過執行更少的Python級別操作來更有效地執行(它需要執行相同的操作,但可能在C中,因為list
是內置類型)。 但更重要的是,如果list
實際上是綁定到其他集合就像一組或一本字典thingIAmLookingFor in list
將使用哈希查找機制這種類型的支持和有效得多 ,而使用for
循環將迫使Python來瀏覽每項目依次。
強制性的后腳本: list
是一個變量的可怕名稱,它包含一個列表,因為它會影響內置list
,這會讓您或任何讀取代碼的人感到困惑。 你最好把它命名為能夠告訴你它意味着什么的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.