Python – 遍历列表的列表

我想遍历列表的列表。
我想遍历不规则嵌套列表里面的列表。
谁能让我知道我该怎么做?

x = [u'sam', [['Test', [['one', [], []]], [(u'file.txt', ['id', 1, 0])]], ['Test2', [], [(u'file2.txt', ['id', 1, 2])]]], []] 

谢谢

这个traverse生成器函数可以用来迭代所有的值:

 def traverse(o, tree_types=(list, tuple)): if isinstance(o, tree_types): for value in o: for subvalue in traverse(value, tree_types): yield subvalue else: yield o data = [(1,1,(1,1,(1,"1"))),(1,1,1),(1,),1,(1,(1,("1",)))] print list(traverse(data)) # prints [1, 1, 1, 1, 1, '1', 1, 1, 1, 1, 1, 1, 1, '1'] for value in traverse(data): print repr(value) # prints # 1 # 1 # 1 # 1 # 1 # '1' # 1 # 1 # 1 # 1 # 1 # 1 # 1 # '1' 

等等,这只是一个列表中的列表?

最简单的方法可能只是使用嵌套for循环:

 >>> a = [[1, 3, 4], [2, 4, 4], [3, 4, 5]] >>> a [[1, 3, 4], [2, 4, 4], [3, 4, 5]] >>> for list in a: ... for number in list: ... print number ... 1 3 4 2 4 4 3 4 5 

还是比这更复杂? 任意嵌套什么的? 让我们知道是否还有其他的东西。

另外,出于性能方面的原因,您可能想要使用列表推导来执行此操作:

http://docs.python.org/tutorial/datastructures.html#nested-list-comprehensions

如果你不想recursion,你可以尝试:

 x = [u'sam', [['Test', [['one', [], []]], [(u'file.txt', ['id', 1, 0])]], ['Test2', [], [(u'file2.txt', ['id', 1, 2])]]], []] layer1=x layer2=[] while True: for i in layer1: if isinstance(i,list): for j in i: layer2.append(j) else: print i layer1[:]=layer2 layer2=[] if len(layer1)==0: break 

这使:

 sam Test Test2 (u'file.txt', ['id', 1, 0]) (u'file2.txt', ['id', 1, 2]) one 

(请注意,它没有查看列表的元组,因为这些元组不是列表。如果你想解决这个问题,你可以添加元组到“isinstance”方法)

这也可以通过itertools.chain来实现,它将连续迭代变成一个单一的迭代:

 import itertools for item in itertools.chain(list_of_lists): # do something with item 

这听起来像你需要使用recursion。 创build一个函数遍历一个列表,如果它碰到一个也是一个列表的项目,调用它自己迭代成员。 这是一个类似的链接:

http://www.saltycrane.com/blog/2008/08/python-recursion-example-navigate-tree-data/

如果您想要在同一个列表中获取所有值,可以使用以下代码:

 text = [u'sam', [['Test', [['one', [], []]], [(u'file.txt', ['id', 1, 0])]], ['Test2', [], [(u'file2.txt', ['id', 1, 2])]]], []] def get_values(lVals): res = [] for val in lVals: if type(val) not in [list, set, tuple]: res.append(val) else: res.extend(get_values(val)) return res get_values(text) 

两个嵌套for循环?

  for a in x: print "--------------" for b in a: print b 

如果你举了一个你想用列表来做的例子,这将有所帮助

 x = [u'sam', [['Test', [['one', [], []]], [(u'file.txt', ['id', 1, 0])]], ['Test2', [], [(u'file2.txt', ['id', 1, 2])]]], []] output = [] def lister(l): for item in l: if type(item) in [list, tuple, set]: lister(item) else: output.append(item) lister(x) 

创build一个方法来遍历嵌套列表。 如果当前元素是列表的实例,则再次调用相同的方法。 举个例子。

 data = [1,2,3,[4,[5,6,7,[8,9]]]] def print_list(the_list): for each_item in the_list: if isinstance(each_item, list): print_list(each_item) else: print(each_item) print_list(data)