我有一个嵌套列表,我的任务是找到它在嵌套列表中的位置。 例如,如果list = [" a",[" b"," c"]],则搜索(list," b" )应该返回2。 如果在任何深度都没有这样的字符串,那么该函数应该返回-1。 到目前为止,我有一个代码,它返回True / False,具体取决于字符串是否在列表中。我怎样才能计算深度?
答案 0 :(得分:0)
如果要搜索目标字符的深度,可以使用列表推导的递归:
def search(data, target, level):
if target in data:
return level
levels = 0
for row in filter(lambda x:isinstance(x, list), data):
levels += search(row, target, level+1)
return levels
val = search(['a', ['b', 'c']], 'b')
result = -1 if not val else val
输出:
2
但是,如果您要查找目标值所在的索引,可以尝试:
def flatten(l, target=str):
if isinstance(l, target):
yield l
else:
for i in l:
for b in flatten(i):
yield b
def search(data, target):
new_list = list(flatten(data))
return new_list.index(target)+1
print(search(['a', ['b', 'c']], 'b'))
输出:
2