递归地获取列表列表中的每个元素(Flattening isn适用)

时间:2017-10-15 18:00:06

标签: python python-3.x recursion

我创建的列表列表可能无限深度,例如:

[[[['Alpha'], ['Bravo']], ['Charlie']], [[['Delta'], ['Echo']], ['Foxtrot']]]

我想查看列表中的每个元素。 在任何级别上它总是一个左右的情况。

编辑:我创建这些列表列表的原因是:我发现它是记录元素之间父子关系的便捷方式。 扁平化在这种情况下不适用,因为它忽略了元素之间的关系。

感谢。

注意:这里有几个类似的问题,但我很确定这不是一个傻瓜

1 个答案:

答案 0 :(得分:2)

由于flattening列表不是一个选项,您可以遍历列表recursively

def traverse(l): 
    for i,ele in enumerate(l):  
       if len(ele)>1:  
          traverse(ele)  
       else:  
          print(ele)  

traverse(l)

#driver values:

IN : l = [[[['Alpha'], ['Bravo']], ['Charlie']], [[['Delta'], ['Echo']], ['Foxtrot']]] 
OUT : 
['Alpha']
['Bravo']
['Charlie']
['Delta']
['Echo']
['Foxtrot']

如果你想要列表元素的深度 ,只需将功能更改为:

def traverse(l, depth): 
    for i,ele in enumerate(l):  
       if len(ele)>1:  
          traverse(ele, depth+1)  
       else:  
          print(ele, depth+1)  

traverse(l, 0)

#driver values

OUT :
['Alpha'] 3
['Bravo'] 3
['Charlie'] 2
['Delta'] 3
['Echo'] 3
['Foxtrot'] 2