我有一个像这样的数据结构(实际的列表非常长,深度也不同)。我事先知道它们的深度。
a=( [1,2], [2,3,[4,5]] )
b=( [[1,2],[2,3]] )
我想要循环遍历每个单独的列表。最好的方法是什么?
我不想最终做出这样的事情:
for l in a:
if instance(l, list):
for ll in l:
if instance(ll, list):
...
我有一个像这样的数据结构(实际的列表非常长,深度也不同)。我事先知道它们的深度。
a=( [1,2], [2,3,[4,5]] )
b=( [[1,2],[2,3]] )
我想要循环遍历每个单独的列表。最好的方法是什么?
我不想最终做出这样的事情:
for l in a:
if instance(l, list):
for ll in l:
if instance(ll, list):
...
由于您没有定义目的,我正在编写一个函数来对所有元素求和:
def rec_sum(lst):
if not lst:
return 0
el = lst.pop()
if isinstance(el, list):
return rec_sum(el) + rec_sum(lst)
else:
return el + rec_sum(lst)
def rec_for_sum(lst):
if not lst:
return 0
count = 0
for el in lst:
if not isinstance(el, list):
count += el
else:
count += rec_for_sum(el)
return count
def myprint(list):
for i in list:
if isinstance(i, list):
myprint(i)
else:
print i
def flatten_list(list_in):
if isinstance(list_in,list):
for l in list_in:
for y in flatten_list(l):
yield y
else:
yield list_in
my_compound_list = [[1,2,3],[4,5,6],[7,8,9,[10,11,12,[13,14,15]]]]
print [f for f in flatten_list(my_compound_list)]
简单的迭代解法(基础不完整):
for item in your_list:
if isinstance(item,list):
...........
else:
...................
这是你应该走的路。这应该足以让你开始。
递归解决方案:
def list_flatten(my_list):
for item in my_list:
if(isinstance(item,list)):
list_flatten(item)
else:
print(item)
这是一个递归解决方案,但要注意内存问题和递归深度。