遍历Python中的list列表

问题描述

| 我想遍历列表清单。 我也想遍历list中不规则嵌套的列表。 谁能告诉我该怎么做?
x = [u\'sam\',[[\'Test\',[[\'one\',[],[]]],[(u\'file.txt\',[\'id\',1,0])]],[\'Test2\',[(u\'file2.txt\',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\",)))]
print list(traverse(data))
# prints [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,[3,5]]
>>> a
[[1,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     ,        这也可以通过itertools.chain.from_iterable来实现,它将平坦化连续的iterable:
import itertools
for item in itertools.chain.from_iterable(iterables):
    # do something with item    
    ,        如果您不想递归,可以尝试:
x = [u\'sam\',[[\'Test\',[[\'one\',[],[]]],[(u\'file.txt\',[\'id\',0])]],[\'Test2\',[(u\'file2.txt\',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\',0])
(u\'file2.txt\',2])
one
(请注意,它没有查看列表的元组,因为元组不是列表。如果要解决此问题,可以将元组添加到\“ isinstance \”方法中)     ,        听起来您需要使用递归。构造一个函数以遍历列表,如果该命中项也是一个列表项,则调用自身以对该成员进行迭代。这是指向类似内容的链接: http://www.saltycrane.com/blog/2008/08/python-recursion-example-navigate-tree-data/     ,        如果您想在同一列表中获取所有值,可以使用以下代码:
text = [u\'sam\',[]]

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)
    ,        
x = [u\'sam\',[]]
output = []

def lister(l):
    for item in l:
        if type(item) in [list,tuple,set]:
            lister(item)
        else:
            output.append(item)

lister(x)
    ,        创建一个方法来递归地迭代嵌套列表。如果当前元素是list的实例,则再次调用相同的方法。如果不是,则打印当前元素。这是一个例子:
data = [1,2,[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)
    ,        两个嵌套的循环?
 for a in x:
     print \"--------------\"
     for b in a:
             print b
如果您举了一个您想对清单做些什么的例子,那将会有所帮助