簡體   English   中英

在列表列表中查找元素

[英]Finding elements in list of lists

我有一個清單。

我想查找它是否包含感興趣的項目。

For example: L=[['READ',[A,B],'2'],['WRITE',[C,D],'2']]

現在,我有一個字符串str=READ ,我想遍歷兩個列表,包括子列表以查找是否存在這樣的元素。 有沒有辦法不使用索引來做到這一點?

我不想使用索引,因為不能保證列表長度保持不變。

使用通用的展平功能:

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

假設搜索的數據結構中沒有循環,這是一個簡單的遞歸問題:

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM