如何在Python中没有循环的情况下搜索嵌套列表(列表列表)中的列表?

时间:2016-02-14 09:23:38

标签: python list

我完全清楚这一点......

<br>

这将返回True。

但我想做的就是这个。

sample=[[1,[1,0]],[1,1]]
[1,[1,0]] in sample

我希望return为True,但返回False。 我可以这样做:

sample=[[1,[1,0]],[1,1]]
[1,0] in sample

但我想知道是否有更好的高效方式。

4 个答案:

答案 0 :(得分:6)

您可以使用来自itertools的链来合并列表,然后在返回的列表中进行搜索。

>>> sample=[[1,[1,0]],[1,1]]
>>> from itertools import chain
>>> print [1,0]  in chain(*sample)
True

答案 1 :(得分:4)

一种递归解决方案,适用于任意(最大递归深度)深度嵌套。如果最外面的列表中的任何元素本身不是可迭代的,也可以工作。

from functools import partial

def contains_nested(some_iterable, elmnt):
    try:
        if elmnt in some_iterable:
            return True
    except TypeError:  # some_iterable is not iterable
        return False
    else:
        return any(map(partial(contains_nested, elmnt=elmnt), some_iterable))

答案 2 :(得分:1)

我不知道如何在没有循环的情况下彻底解决这个问题。但是在Python中你永远不应该写for i in range(len(sample))

所以问题的答案是:是的,您可以更好,更快地循环列表for i in sample

Python处理循环的方式非常快,并且非常适用于大量的entriey(超过50.000)。

答案 3 :(得分:1)

您可以flatten sample列表,然后在该展开的列表中进行搜索:

> sample = [[1, [1, 0]], [1, 1]]
> [1, 0] in [item for sublist in sample for item in sublist]
> True