【发布时间】:2023-04-05 06:51:01
【问题描述】:
我有一个由嵌套列表和字典组成的结构。我想申请一个 作用于每个元素。如何在没有递归的情况下做到这一点。
def visit(data, func):
if isinstance(data, dict):
for k, v in data.items():
data[k] = visit(v, func)
return data
elif isinstance(data, list):
for i, v in enumerate(data):
data[i] = visit(v, func)
return data
else:
return func(data)
递归版本适用于小数据,但我遇到了 RecursionError 数据量大时异常。
我寻找消除递归的一般方法,我发现的方法依赖于 首先将递归调用转换为尾调用,我的问题是 我的示例中的递归调用在循环内。
【问题讨论】:
-
对于嵌套深度超过 1000 层的数据结构,您将达到递归限制,这似乎很荒谬。我怀疑实际发生的情况是您的数据中有循环。
-
@Zii8roZi 为什么不提高递归限制?
import sys; sys.setrecursionlimit(100000) -
你想达到什么目的?列表和字典应该如何处理,因为列表只包含元素,而字典提供键值对。
-
虽然帮助 OP 解决他们的具体问题总是好的,但这也是一个普通观众的 QA 网站。在基本算法的递归和迭代实现之间切换是一种重要的技能,对于这类网站来说也是一个很好的问题。
-
@Frito 这将是一个临时解决方案。如果数据再次增长,我将不得不对其进行更改。
标签: python recursion data-structures