2012-10-17 41 views

回答

517

你可以使用這個語法:

if myItem in list: 
    # do something 

而且,逆算子:

if myItem not in list: 
    # do something 

它是列表,元組,組和類型的字典(檢查鍵)做工精細。

注意這是在列表和元組中的O(n)操作,但在集合和字符串中是O(1)操作。

+1

用含有numpy的陣列的列表,將這種檢查對於numpy的實例內部numpy的實例或值? –

+0

小心!這匹配,而這很可能是你沒有想到的:'o =' - skip'; o(「--skip-ias」); #返回True!' –

0

如果該項目不存在,則列表方法index將返回-1,並且如果該項目不存在,將返回該項目的索引。或者在if語句,您可以執行以下操作:

if myItem not in list: 
    #do things 
+11

如果元素不存在,那麼'index'方法不會返回-1,它會拋出一個'ValueError'異常。 – MondKin

49

除了說什麼其他:

if myItem in list: 
    #do things 

您還可以檢查元素是否不在列表與if語句如下,您可能也有興趣知道in所做的是調用list.__contains__方法,您可以在您編寫的任何類上定義該方法,並且可以非常方便地在其全部範圍內使用python。  

啞的使用可能是:

>>> class ContainsEverything: 
    def __init__(self): 
     return None 
    def __contains__(self, *elem, **k): 
     return True 


>>> a = ContainsEverything() 
>>> 3 in a 
True 
>>> a in a 
True 
>>> False in a 
True 
>>> False not in a 
False 
>>>   
0

我最近想出了這樣一個襯墊用於獲取True如果列表包含任何數量的項目的出現,或False如果它不包含任何事件或任何在所有。使用next(...)爲此提供了默認返回值(False),意味着它應該比運行整個列表理解運行速度快得多。

list_does_contain = next((True for item in list_to_test if item == test_item), False)

+0

在我的情況下,我有一個名爲Category的對象列表,需要它僅測試屬性Link,所以這個解決方案適合我的情況。謝謝 – rodrigorf

相關問題