python - 将 itertools 用于具有依赖性的不同范围的任意数量的嵌套循环?

标签 python python-3.x python-itertools functools

给定上限列表: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 - 将 itertools 用于具有依赖性的不同范围的任意数量的嵌套循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39109537/

相关文章:

python - Python-小小的初学者代码困惑

python - 为单个窗口中显示的框架放置一个滚动条

python - 内核在 itertools.combinations 命令后终止

python - 值(value)递减的产品

php - 如何为 PHP-include 提供自己的命名空间(如 Python 中的 "from a import MyClass")?

python - SQLAlchemy 同时进行一对一和一对多(AmbigouslyForeignKeysError)

python - 在特定位置打开命令提示符,然后使用 python 在该位置运行带有一些命令行参数的脚本

python - 降低Python中字典暴力破解的复杂度

python - “int”对象在列表中不可迭代

python - 如何在 Python 中通过字符串定界符将文件分成 block