Skip to main content
 首页 » 编程设计

Python之高级参数嵌套循环

2025年05月04日13sxdcgaq8080

我在参数嵌套循环上找到了很好的答案 - Parametric nested loops in Python

不过,我的要求有点难

问题:

这是 3 层深度的嵌套循环(我想要具有 n 层深度的函数):

for i in range(100 + 1): 
    for j in range(i, 100 + 1): 
        for k in range(j, 100 + 1): 
            -> need to retrieve [i,j,k] 

请注意,每个循环的起点是动态的,并随每个父循环而变化

请您参考如下方法:

这是一个使用默认参数的递归方法。下面的编号点是指代码中编号的注释。

  1. (base) 深度为零。我们完成了,所以产生组合,comb
  2. (归纳)深度至少为 1。对于范围中的每个 x,委托(delegate)给递归生成器使用 x 作为嵌套范围的新起点并将 x 附加到组合 comb。
def nested_range (depth = 0, start = 0, end = 1, comb = ()): 
  if depth == 0: 
    yield comb                  #1 
  else: 
    for x in range(start, end): #2 
      yield from nested_range(depth - 1, x, end, comb + (x,)) 

这是一个三 (3) 层深的嵌套范围 -

for p in nested_range (3, 0, 4): 
  print(p) 
 
# (0, 0, 0) 
# (0, 0, 1) 
# (0, 0, 2) 
# (0, 0, 3) 
# (0, 1, 1) 
# (0, 1, 2) 
# (0, 1, 3) 
# (0, 2, 2) 
# (0, 2, 3) 
# (0, 3, 3) 
# (1, 1, 1) 
# (1, 1, 2) 
# (1, 1, 3) 
# (1, 2, 2) 
# (1, 2, 3) 
# (1, 3, 3) 
# (2, 2, 2) 
# (2, 2, 3) 
# (2, 3, 3) 
# (3, 3, 3) 

此实现是一个总函数,当 depth = 0 时提供有效结果 -

for p in nested_range (0, 0, 4): 
  print(p) 
 
# () 

为了更好地衡量,这里是五 (5) 层深的嵌套范围的输出 -

for p in nested_range (5, 0, 3): 
  print(p) 
 
# (0, 0, 0, 0, 0) 
# (0, 0, 0, 0, 1) 
# (0, 0, 0, 0, 2) 
# (0, 0, 0, 1, 1) 
# (0, 0, 0, 1, 2) 
# (0, 0, 0, 2, 2) 
# (0, 0, 1, 1, 1) 
# (0, 0, 1, 1, 2) 
# (0, 0, 1, 2, 2) 
# (0, 0, 2, 2, 2) 
# (0, 1, 1, 1, 1) 
# (0, 1, 1, 1, 2) 
# (0, 1, 1, 2, 2) 
# (0, 1, 2, 2, 2) 
# (0, 2, 2, 2, 2) 
# (1, 1, 1, 1, 1) 
# (1, 1, 1, 1, 2) 
# (1, 1, 1, 2, 2) 
# (1, 1, 2, 2, 2) 
# (1, 2, 2, 2, 2) 
# (2, 2, 2, 2, 2)