如何更简洁地实现多层嵌套for循环?
解决多层嵌套循环的简洁遍历方法
首先纠正你提到的错误写法:for i, j in range(10) 会触发ValueError,因为range(10)每次迭代返回单个整数,无法拆包为两个变量,这个写法是不可行的。
针对你的需求——简洁遍历多个数值范围,甚至动态指定遍历层数,Python的标准库itertools.product是最佳选择,它专门用于生成多个可迭代对象的笛卡尔积,完美替代多层嵌套循环:
1. 固定层数的遍历
对应你原来的三层嵌套循环,用product可以写成:
from itertools import product for i, j, k in product(range(10), repeat=3): print(i, j, k)
这里repeat=3表示重复使用同一个可迭代对象(range(10))三次,生成所有0-9的三元组组合,和三层嵌套循环的效果完全一致。
2. 动态指定层数的遍历
如果要实现传入参数(比如4)就遍历4个数值,只需要修改repeat的值:
from itertools import product n = 4 # 可以替换成任意正整数 for nums in product(range(10), repeat=n): print(nums) # nums是包含4个元素的元组,也可以拆包:for a, b, c, d in ...
当n=4时,这段代码会遍历所有0-9的四元组组合,等价于四层嵌套的for循环。
为什么用product?
- 代码更简洁,层数越多优势越明显,避免了嵌套缩进带来的可读性问题
- 性能和嵌套循环相当,甚至在某些场景下更高效
- 支持传入不同的可迭代对象,比如
product(range(5), range(10), range(3))可以生成三个不同范围的组合
内容的提问来源于stack exchange,提问作者Stefan Versace
相关产品推荐
相关产品推荐

