如何检查一个元素是否在嵌套列表中?
我正在尝试定义一个函数nested(x, ys)
,用于测试一个值x
是否出现在整数嵌套列表ys
中。结果必须为True
或False
。
如何检查一个元素是否在嵌套列表中?
我正在尝试定义一个函数nested(x, ys)
,用于测试一个值x
是否出现在整数嵌套列表ys
中。结果必须为True
或False
。
循环遍历嵌套的列表并对其进行测试;any()
函数可以使此过程更加高效:
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
,以避免对字符串进行“展开”操作。
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]]])