Python中如何将range列表转换为元素集并生成所有跨列表元素组合
实现方案
Python 标准库的itertools.product可以直接生成多个可迭代对象的笛卡尔积,甚至不需要提前把所有 range 手动转成列表B,如果你确实需要先得到B也可以单独处理。
方法1:一步到位直接生成笛卡尔积(无需提前转B)
itertools.product支持直接传入 range 对象作为参数,你只需要用*把列表A解包传进去即可:
import itertools A = [range(0,2),range(0,4),range(0,3),range(0,3)] # 直接生成所有笛卡尔积组合,转成列表的写法如下 result = list(itertools.product(*A))
如果需要每个组合元素都是列表而不是元组,调整写法即可:
result = [list(item) for item in itertools.product(*A)]
最终结果长度为你计算的2×4×3×3=72,最小元素组合为[0, 0, 0, 0],最大为[1, 3, 2, 2],完全符合需求。
方法2:先转成列表B再生成笛卡尔积
如果你需要先得到中间结果B,用列表推导式一行就能完成转换:
B = [list(r) for r in A]
之后同样用itertools.product处理B即可:
result = [list(item) for item in itertools.product(*B)]
内容的提问来源于stack exchange,提问作者Chr_8580
相关产品推荐
相关产品推荐

