使用递归模拟n层嵌套for循环的实现方法
动态生成对应层数的嵌套循环实现方案
基础需求:基于整数列表生成嵌套循环
比如输入列表 [1,2,3,4],要生成与列表长度一致的嵌套循环,每层循环次数对应列表中的值,最终调用目标函数myfunc。用递归可以轻松实现这种动态层数的循环:
def recursive_loop(values, current_indices=None): if current_indices is None: current_indices = [] # 递归终止:当前索引长度等于输入列表长度时,执行目标函数 if len(current_indices) == len(values): myfunc(current_indices) # 将各层循环的索引传入目标函数 return # 处理当前层循环 current_count = values[len(current_indices)] for idx in range(current_count): recursive_loop(values, current_indices + [idx]) # 测试用目标函数,替换为你的实际逻辑 def myfunc(inputs): print(inputs) # 调用示例 recursive_loop([1,2,3,4])
这段代码的逻辑很直接:每次递归处理一层循环,把当前层的索引加入临时列表;当临时列表长度和输入列表一致时,触发myfunc执行,效果和手动写多层嵌套循环完全一致。
进阶需求:支持自定义步长的循环
如果输入格式为[[value, step], ...](比如[[5,2], [4,0.8]]),需要每层循环按指定步长遍历数值。由于Python原生range不支持非整数步长,我们可以自定义生成器处理,再结合递归实现:
def step_range(end, step): """自定义生成器,支持按步长遍历到end(不包含end)""" current = 0 while current < end: yield current current += step def recursive_step_loop(step_values, current_values=None): if current_values is None: current_values = [] if len(current_values) == len(step_values): myfunc(current_values) # 传递当前各层的遍历值 return # 获取当前层的终止值和步长 end, step = step_values[len(current_values)] for val in step_range(end, step): recursive_step_loop(step_values, current_values + [val]) # 测试用目标函数 def myfunc(inputs): print(inputs) # 调用示例 recursive_step_loop([[5,2], [4,0.8]])
如果需要避免浮点数累加的精度误差,可以用numpy.arange替代自定义的step_range,只需替换生成器部分:
import numpy as np def step_range(end, step): return np.arange(0, end, step)
内容的提问来源于stack exchange,提问作者Jack Butler
相关产品推荐
相关产品推荐

