2024-04-24 01:13:01 发布
网友
在深度为参数的情况下,如何生成多个嵌套循环。 我在想一个以深度为参数的函数
def make_nested_loops(depth): ...
并且,depth=3的结果如下
depth=3
到目前为止,我已经能够使用字符串构建和exec命令来完成这项工作。但我认为有更好更有效的方法来做这件事。在
exec
一种低效但简单的方法是使用itertools.product并过滤不需要的元组:
itertools.product
def make_tuples(depth, n): for i in itertools.product(range(n), repeat=depth): if sorted(i) < i: continue yield i
更有效的是递归生成器:
使用它看起来像
for (i1, i2, i3) in make_tuples(3, 10): # do stuff with i1, i2, i3
如果深度是真的动态的,那么您当然不能解压来自make_tuples的元组。身体必须知道如何处理元组 长度固定但未知的。在
make_tuples
for tpl in make_tuples(n, 10): # Do stuff with tpl
我想你最多可以有21个嵌套循环。所以你可以做的是在你的函数中有21个嵌套的循环,并检查每个循环是否达到了所需的深度。如果不是,则向当前深度变量添加一个。在
一种低效但简单的方法是使用
itertools.product
并过滤不需要的元组:更有效的是递归生成器:
^{pr2}$使用它看起来像
如果深度是真的动态的,那么您当然不能解压来自
make_tuples
的元组。身体必须知道如何处理元组 长度固定但未知的。在我想你最多可以有21个嵌套循环。所以你可以做的是在你的函数中有21个嵌套的循环,并检查每个循环是否达到了所需的深度。如果不是,则向当前深度变量添加一个。在
相关问题 更多 >
编程相关推荐