Lar*_*gas 6 python recursion for-loop
我有这样的数据结构(列表的实际列表非常长且深度不同).我事先知道他们的深度.
a=( [1,2], [2,3,[4,5]] )
b=( [[1,2],[2,3]] )
Run Code Online (Sandbox Code Playgroud)
想要循环遍历每个列表.怎么做到最好?
我不想最终做这样的事情:
for l in a:
if instance(l, list):
for ll in l:
if instance(ll, list):
...
Run Code Online (Sandbox Code Playgroud)
由于您没有定义目的,因此我正在编写一个对所有元素求和的函数:
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)
Run Code Online (Sandbox Code Playgroud)
即使您事先知道深度,使用递归也更容易解决。
请记住,Python 限制堆叠 1000 个堆栈帧。因此,如果您的列表包含超过 1000 个项目,您应该会收到异常。
如果您认为可以拥有超过 1000 个项目,这里是一个混合解决方案,它使用递归和 for 循环。限制为 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2412 次 |
| 最近记录: |