如何检查元素是否在嵌套列表中?

时间:2013-11-30 00:28:39

标签: python

如何检查元素是否在嵌套列表中?

我正在尝试定义一个函数nested(x, ys),用于测试值x是否出现在嵌套的整数列表ys中。结果必须具有True的值False

2 个答案:

答案 0 :(得分:6)

遍历嵌套列表并测试它们; any() function使效率提高:

def nested(x, ys):
    return any(x in nested for nested in ys)

这假设ys仅嵌套到一个级别。

如果需要递归,您可以使用:

def flatten(lst):
    for elem in lst:
        if isinstance(elem, (list, tuple)):
            for nested in flatten(elem):
                yield nested
        else:
            yield elem

def nested(x, ys):
    return any(x == nested for nested in flatten(ys))

我对listtuple使用了简化测试,以避免'展平'字符串。

答案 1 :(得分:2)

这适用于任何深度:

import collections

def nested(x, ys):
    if x in ys: return True        

    # only keep iterables
    nests = [y for y in ys if isinstance(y, collections.Iterable)]

    # call nested() on each iterable
    return any(nested(x, nest) for nest in nests)

# returns True, will go into multiple nests to find 5
print nested(5, [[1,2],[3,4],[1,2,[3,5]]])