我在列表中有一個列表。查找列表中的元素
我想查找它是否包含感興趣的項目。
For example: L=[['READ',[A,B],'2'],['WRITE',[C,D],'2']]
現在,我有一個字符串,str=READ
,我要遍歷兩個列表,包括子列表來找到這樣的元素是否存在。有沒有辦法做到這一點,而不訴諸索引?
我不想使用索引,因爲不能保證列表長度保持不變。
我在列表中有一個列表。查找列表中的元素
我想查找它是否包含感興趣的項目。
For example: L=[['READ',[A,B],'2'],['WRITE',[C,D],'2']]
現在,我有一個字符串,str=READ
,我要遍歷兩個列表,包括子列表來找到這樣的元素是否存在。有沒有辦法做到這一點,而不訴諸索引?
我不想使用索引,因爲不能保證列表長度保持不變。
只要在數據stucture被搜索,這是一個簡單的遞歸問題沒有循環:
def find(x, L):
return x in L or any(find(x, sublist)
for sublist in L
if isinstance(sublist, list))
相反,如果有可能的數據結構中循環,那麼你就要警惕進入無限遞歸
def find(x, L, seen=None):
if seen is None:
seen = set()
if id(L) in seen:
# Avoid infinite recursion
return False
seen.add(id(L))
return x in L or any(find(x, sublist, seen)
for sublist in L
if isinstance(sublist, list))
使用一個共同的平坦化作用:
import collections
def flatten(l):
for el in l:
if isinstance(el, collections.Iterable) and not isinstance(el, basestring):
for sub in flatten(el):
yield sub
else:
yield el
您可以拼合列表,然後檢查是否讀取它。
>>> 'READ' in flatten(L)
True
這是一個很好的方法。但我不想使用任何複雜的東西。看看我接受的答案,那正是我想要的。 –
@RohitShinde好的。 – TerryA
如何查看元素是否在其中?它在某些字符處返回<發生器對象>'總是... –
@GM:在複製函數時,您必須完成一些拼寫錯誤。他們在Python2和Python3中工作。 – 6502
不,我複製並粘貼它。然後鍵入'find('A',L)'和這個返回'<發生器對象 0x10dc7ab90>' –