如何让Python函数支持任意数量列表的动态嵌套遍历
解决任意数量列表的嵌套遍历求和问题
这问题我之前也碰到过,自己硬写嵌套循环肯定不现实(总不能写无限层吧),其实Python标准库的itertools.product就是干这个的,完美匹配你的需求!
实现思路
原来的两层嵌套循环,本质上是在取两个列表的笛卡尔积(也就是所有元素的组合),然后对每个组合求和。对于任意数量的列表,我们只需要用itertools.product生成所有列表的笛卡尔积,再对每个组合求和打印即可。
代码实现
import itertools def func(*args): # 生成所有列表的笛卡尔积,每个元素是一个包含各列表元素的元组 for combo in itertools.product(*args): # 对元组里的元素求和并打印 print(sum(combo))
示例验证
比如传入3个列表:
listA = [1, 2] listB = [3, 4] listC = [5, 6] func(listA, listB, listC)
输出结果就是:
9 10 10 11 10 11 11 12
完全对应三层嵌套循环for i in listA: for j in listB: for k in listC: print(i+j+k)的结果。
如果只传2个列表,效果和你原来的函数完全一致;传4个列表的话,自动变成四层循环求和,完全不需要修改代码。
手动实现(不用标准库的递归方式)
如果不想依赖itertools,也可以用递归的方式实现,核心思路是逐层拆解列表:
def func(*args): def recursive_helper(current_sum, remaining_lists): if not remaining_lists: print(current_sum) return # 遍历当前第一个列表的所有元素 for num in remaining_lists[0]: # 递归处理剩下的列表,累加当前元素 recursive_helper(current_sum + num, remaining_lists[1:]) recursive_helper(0, args)
这个版本同样支持任意数量的列表,逻辑是从第一个列表开始,逐个元素累加,直到处理完所有列表,然后打印总和。
内容的提问来源于stack exchange,提问作者pablowilks2
相关产品推荐
相关产品推荐

