查找列表列表中的元素

时间:2013-09-22 09:18:55

标签: python

我在列表中有一个列表。

我想知道它是否包含感兴趣的项目。

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

现在,我有一个字符串str=READ,我想迭代这两个列表,包括子列表以查找是否存在这样的元素。有没有办法在不诉诸索引的情况下做到这一点?

我不想使用索引,因为无法保证列表长度保持不变。

2 个答案:

答案 0 :(得分:2)

使用常见的拼合功能:

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。

>>> 'READ' in flatten(L)
True

答案 1 :(得分:2)

如果在搜索的数据结构中没有循环,则这是一个简单的递归问题:

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