python – 使用itertools任意数量的具有依赖关系的不同范围的嵌套循环?

给出一个上限列表:B1,B2,… BN;
依赖函数:f1,…,fN-1,

我想知道是否有一个使用itertools或python中的其他类的配方:

for i1 in range(0, B1):  
    for i2 in range(f1(i1), B2): ...
         for iN in range(fN-1(iN-1), BN)
             dostuff(i1, i2, ... iN)

哪里有N级筑巢?
我想使用这样的辅助函数:
dependentProducts(Bs,fs,dostuff),
返回一个列表或可迭代的

理想情况下,实现将是迭代而不是递归.

解决方法:

使用@ LaurentLAPORTE设置的迭代解决方案.把这个代码放在他的下面,它应该工作.我的args是一堆参数,只要它满了就会被送入dostuff.实际的解决方案是中间部分,顶部和底部部分只是测试.

stefan = []
def dostuff(*args):
    stefan.append(list(args))

args = [-1]
while args:
    n = len(args)
    args[-1] += 1
    if args[-1] >= B[n-1]:
        args.pop()
    elif n == len(B):
        dostuff(*args)
    else:
        args.append(F[n](args[-1]) - 1)

assert expected == stefan
上一篇:python – 如何将numpy数组中的相同元素移动到子数组中


下一篇:python – itertools.product – 返回列表而不是元组