2017-01-24 68 views
0
a=[1,2,5] 
b=[3,4] 
x=8 
res= (x not in a) and (x not in b) #True 

但是,檢查它的最好方法是什麼?如何檢查值是否不在這兩個列表

+1

這幾乎是它。 – TigerhawkT3

+1

我的意思是,如果你想要,你可以使用'all',但只有兩個列表,你現在的方法已經很可讀了。 – TigerhawkT3

+1

如果您有很多值,而且您的列表相當大,那麼您應該將您的列表轉換爲集合。 – Akavall

回答

1

當你的解決方案是完全正常和可讀性,你可以把它更加通用,允許可變數量的列表,並檢查是否一個給定的元素在任何他們通過在函數進行包裝:

>>> def not_in_any(*lists, key=None): 
     for lst in lists: 
      if key in lst: 
       return False 
     return True 

>>> not_in_any([2, 5, 7], [8, 9, 23], [34, 56, 78], [32, 91, 6], key=32) 
False 
>>> not_in_any([2, 5, 7], [8, 9, 23], [34, 56, 78], [31, 91, 6], key=32) 
True 
>>> 

然而要注意的Python已經提供了一個內置的功能 - any()它已經提供了在我們的函數for循環的行爲:

def not_in_any(key=None, *lists): 
    not any(key in l for l in lists) 
+0

或者只是'沒有任何(在列表中鍵入l)l「或」全部(鍵不在l中列出l)「。 – TigerhawkT3

+0

@ TigerhawkT3嗯,那也可以:|爲了OP的緣故,我試圖做得更加冗長。我會將其添加到我的答案。 –

-1

另一種方法是CONCAT和檢查: -

a=[1,2,5] 
b=[3,4] 
x=8 
res= x not in a+b #True 
+0

這不必要地創建一個新的列表。 – TigerhawkT3

+0

是的,這是方便的單一檢查或比較 –

+0

我不明白你爲什麼對批評的迴應是贊同僞裝的讚美... – TigerhawkT3

0
a=[1,2,5] 
b=[3,4] 
x=8 
all(x not in i for i in (a, b)) 

OR:

from itertools import chain 
x not in chain(a, b) 
相關問題