python中带深度参数的嵌套循环

时间:2017-07-07 13:36:22

标签: python loops nested-loops

如何在深度为参数的情况下创建多个嵌套循环。 我正在考虑一个以深度为参数的函数

depth=3

并且for i1 in range(10): for i2 in range(i1 + 1, 10): for i3 in range(i2 + 1, 10): # do stuff 的结果如下

exec

到目前为止,我已经能够使用字符串构建和$.post("/SurveyResult.aspx", { test: 'testing', }).done(function (data) { alert("Data Updated"); }); 命令来完成此操作。但我认为有更好,更有效的方法。

2 个答案:

答案 0 :(得分:1)

低效但简单的方法是使用itertools.product并过滤不需要的元组:

def make_tuples(depth, n):
    for i in itertools.product(range(n), repeat=depth):
        if sorted(i) < i:
            continue
        yield i

更高效的是递归生成器:

def make_tuples(depth, n, start=0):
    if depth == 0:
        yield ()
    else:
        for x in range(start, n):
            for t in make_tuples(depth - 1, n, x + 1):
                yield (x,) + t

使用它看起来像

for (i1, i2, i3) in make_tuples(3, 10):
    # do stuff with i1, i2, i3

如果深度真的动态,你当然不能解包来自make_tuples的元组。身体将不得不知道如何处理元组 固定但未知的长度。

for tpl in make_tuples(n, 10):
    # Do stuff with tpl

答案 1 :(得分:0)

我认为你可以拥有的最大嵌套循环数是21。所以你可以做的是在你的函数中有21个嵌套循环,并检查每个循环是否达到了所需的深度。如果没有,请在当前深度变量中添加一个。