如何检查元素是否在嵌套列表中?
我正在尝试定义一个函数nested(x, ys)
,用于测试值x
是否出现在嵌套的整数列表ys
中。结果必须具有True
的值False
。
答案 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))
我对list
和tuple
使用了简化测试,以避免'展平'字符串。
答案 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]]])