Python实现可变数量嵌套for循环,自动生成参数组合写入CSV
解决方案
不用自己写递归,直接用Python标准库的itertools.product就能轻松实现动态参数组合,完全不需要修改循环结构,新增/删除参数只需调整参数列表即可。
优化后代码
import csv import itertools # 定义参数列表,顺序对应CSV的列顺序;新增/删除参数直接改这个列表就行 ka = [0.217, 0.445] kb = [0.03, 0.05] kc = [10] kd = [0.15625, 0.7] ke = [1.02, 0.78] La = [0.15, 0.25] Lb = [0.025, 0.075] tc = [0.002, 0.007] Ld = [0.025, 0.115] Le = [0.07, 0.2] # 把所有参数按CSV列顺序整理成一个列表 param_lists = [ka, kb, kc, kd, ke, La, Lb, tc, Ld, Le] # 可选:定义CSV表头,和参数顺序对应 headers = ['ka', 'kb', 'kc', 'kd', 'ke', 'La', 'Lb', 'tc', 'Ld', 'Le'] with open('test.csv', 'w', newline='') as file: writer = csv.writer(file) # 写入表头(如果不需要可以删掉这行) writer.writerow(headers) # 生成所有参数组合并写入 for combo in itertools.product(*param_lists): writer.writerow(combo)
动态调整参数的方法
如果要新增kf和Lf,只需要:
- 定义
kf = [x, y]和Lf = [m, n] - 把
kf和Lf添加到param_lists的末尾(或你想要的列位置) - 把
'kf'和'Lf'添加到headers对应位置
整个过程不需要修改任何循环逻辑,完全动态适配参数数量。
为什么不用递归?
itertools.product是Python官方实现的笛卡尔积生成工具,比自己写递归更高效、更易读,且无需维护复杂的递归逻辑,是处理这类问题的最优解。
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

