我完全清楚这一点......
<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
但我想知道是否有更好的或高效方式。
答案 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