搜索字符串在嵌套列表中的位置

时间:2018-01-08 21:18:27

标签: python list

我有一个嵌套列表,我的任务是找到它在嵌套列表中的位置。 例如,如果list = [" a",[" b"," c"]],则搜索(list," b" )应该返回2。 如果在任何深度都没有这样的字符串,那么该函数应该返回-1。 到目前为止,我有一个代码,它返回True / False,具体取决于字符串是否在列表中。我怎样才能计算深度?

1 个答案:

答案 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