我想遍历列表列表.
我想迭代列表中的不规则嵌套列表.
任何人都可以让我知道我该怎么做?
x = [u'sam', [['Test', [['one', [], []]], [(u'file.txt', ['id', 1, 0])]], ['Test2', [], [(u'file2.txt', ['id', 1, 2])]]], []]
Run Code Online (Sandbox Code Playgroud)
小智 48
此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'
Run Code Online (Sandbox Code Playgroud)
vic*_*ooi 33
等等,这只是一个列表中的列表?
最简单的方法可能就是使用嵌套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
Run Code Online (Sandbox Code Playgroud)
还是比这更复杂的东西?任意嵌套还是什么?如果还有别的东西,请告诉我们.
此外,出于性能原因,您可能希望使用列表推导来执行此操作:
http://docs.python.org/tutorial/datastructures.html#nested-list-comprehensions
ign*_*low 14
这也可以通过itertools.chain.from_iterable来实现,这会使连续的迭代变平:
import itertools
for item in itertools.chain.from_iterable(iterables):
# do something with item
Run Code Online (Sandbox Code Playgroud)
如果你不想要递归,你可以试试:
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
Run Code Online (Sandbox Code Playgroud)
这使:
sam
Test
Test2
(u'file.txt', ['id', 1, 0])
(u'file2.txt', ['id', 1, 2])
one
Run Code Online (Sandbox Code Playgroud)
(请注意,它看起来并不成元组列表,因为元组不是列表,你可以添加元组的"isinstance"的方法,如果你想解决这个问题)
归档时间: |
|
查看次数: |
151307 次 |
最近记录: |