2017-04-26 80 views
1

,我有以下格式的元組的列表:的Python:檢查「是」在一個列表中的特定子元素

list = [(var1, var2, var3). (var1, var2, var3), ...] 

是否有可能構建一個if var is in list聲明,如果只檢查var是特別是在var3插槽之一?

例如,給出以下列表:

list = [(1, 2, 3), (7, 8, 9)] 

我希望能夠以這樣的方式,這將是真正的檢查if var is in List如果var == 3但不是真的,如果var == 2因爲它只是檢查在每個元組中的具體位置

+5

在你的示例代碼中,你可以做'if var in(x [2] for x in list)' – vaultah

+2

不要將變量命名爲語言關鍵字 - 列表。 – Todor

+0

@vaultah這真的很有用。非常感謝! – user3776749

回答

2

您可以使用:

if any(x[2] == var for x in l) 

(PS:不命名您的變量list,因爲你覆蓋內置類型)

+1

這是完美的,謝謝!是的,實際的名稱會更具描述性,「node_list」等 – user3776749

4

您可以使用內置的any

>>> lst = [(1, 2, 3), (7, 8, 9)] 
>>> any(v3==3 for *_, v3 in lst) 
True 

它出現短路,一旦找到匹配的,所以你並不需要遍歷整個列表。

可擴展到Python 2(因爲擴展包時不會工作):

any(v3==3 for _, _, v3 in lst) 
+1

'* _,v3'很可愛。 – erip

+0

這將工作'lst = [(1,2,3,7),(8,9)]'? – amarnath

+0

@amarnath Python 3解決方案將始終用於最後一項,所以是的。 –

3

您可以使用以下技巧獲取所有var1值列表,所有var2值列表以及所有var3值列表:

var1s, var2s, var3s = zip(*list) 

然後你只需檢查if var is in var3s

相關問題