我有一個Python列表列表。如下圖所示,我想檢查一個子列表是否包含一個項目。以下嘗試失敗。有沒有人知道一個簡單的方法 - 沒有我寫我自己的循環?Python 2.7:檢查子列表是否包含項目
>>> a = [[1,2],[3,4],[5,6],7,8,9]
>>> 2 in a
我希望的True
,但換來的是False
我有一個Python列表列表。如下圖所示,我想檢查一個子列表是否包含一個項目。以下嘗試失敗。有沒有人知道一個簡單的方法 - 沒有我寫我自己的循環?Python 2.7:檢查子列表是否包含項目
>>> a = [[1,2],[3,4],[5,6],7,8,9]
>>> 2 in a
我希望的True
,但換來的是False
>>> a = [[1,2],[3,4],[5,6],7,8,9]
>>> any(2 in i for i in a)
True
我不認爲有這樣做的測試沒有某種形式的環路的任何方式。
這是一個使用一個簡單的for
循環到子列表中明確檢查對象的功能:
def sublist_contains(lst, obj):
for item in lst:
try:
if obj in item:
return True
except TypeError:
pass
return False
當然,如果對象是在頂層列表不考,也不會如果有多個嵌套級別,它就會工作。下面是一個使用遞歸一個更通用的解決方案,這使循環中則傳遞給內置函數any
發電機的表達:
def nested_contains(lst, obj):
return any(item == obj or
isinstance(item, list) and nested_contains(item, obj)
for item in lst)
簡單的方法來做到這一點是:
a = [[1,2],[3,4],[5,6],7,8,9]
result = [2 in i for i in a]
True in result --> True
這是如何[扁平化列表](http://stackoverflow.com/questions/2158395/flatten-an-irregular-list-of-lists-in-python)的問題上的變體。 – Blckknght