Python:在列表中找到

Python: Find in list

來源: link 標籤:pythonfind 更新時間:

  問題

我遇到了這個:

 item = someSortOfSelection()
if item in myList:
    doMySpecialFunction(item)
 

但有時它不適用於我的所有專案,好像它們沒有在列表中識別(當它是字串列表時).

這是在列表中找到專案的最“pythonic”的方法:if x in l:?

  最佳答案

至於您的第一個問題:該程式碼非常好,如果item等於myList中的一個元素,則應該工作.也許您嘗試找到一個不完全匹配其中一個專案的字串,或者您正在使用一個不準確的浮點值.

至於你的第二個問題:如果在列表中“找到”東西,實際上有幾種可能的方法。

檢查內部是否有東西

這是您描述的用例:檢查列表中是否有東西.如您所知,您可以使用in運算子:

 3 in [1, 2, 3] # => True
 

過濾集合

也就是說,按符合某個條件的順序查詢所有元素.您可以使用列表理解或生成器表示式:

 matches = [x for x in lst if fulfills_some_condition(x)]
matches = (x for x in lst if x > 6)
 

後者將返回一個生成器,您可以想象它是一個懶惰的列表,只有當您遍歷它時才會構建.順便說一句,第一個完全等同於

 matches = filter(fulfills_some_condition, lst)
 

在Python 2中.這裡您可以看到高階函式在工作.在Python 3中,filter不返回列表,而是類似於泛型的物件.

查詢第一次發生

如果您只想要匹配條件的第一件事(但您還不知道它是什麼),那麼使用for迴圈(可能也使用else子句,這並不是眾所周知的)是很好的.您也可以使用

 next(x for x in lst if ...)
 

如果沒有找到,它將返回第一個匹配或提高StopIteration.或者,您可以使用

 next((x for x in lst if ...), [default value])
 

找到專案的位置

對於列表,還有index方法,如果您想知道某個元素在列表中的位置,有時會有用:

 [1,2,3].index(2) # => 1
[1,2,3].index(4) # => ValueError
 

但是,請注意,如果您有重複項,.index總是返回最低索引:.....

 [1,2,3,2].index(2) # => 1
 

如果有重複,並且您希望所有索引,那麼您可以使用enumerate()代替:

 [i for i,x in enumerate([1,2,3,2]) if x==2] # => [1, 3]
 

  相同標籤的其他問題

pythonfind