我有这样的数据结构(列表的实际列表非常长且深度不同).我事先知道他们的深度.
a=( [1,2],[2,3,[4,5]] )
b=( [[1,3]] )
想要循环遍历每个列表.怎么做到最好?
我不想最终做这样的事情:
for l in a:
if instance(l,list):
for ll in l:
if instance(ll,list):
...
最佳答案
既然你没有定义目的,我正在编写一个对所有元素求和的函数:
原文链接:https://www.f2er.com/python/439661.htmldef 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)
即使您事先知道深度,使用递归也更容易解决.
请记住,Python限制堆叠1000个堆栈帧.因此,如果您的列表包含超过1000个项目,则应该获得异常.
如果您认为可以有超过1000个项目,那么这是一个混合解决方案,它使用递归和循环.它限制在1000个级别,而不是1000个项目:
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