You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将列表的列表传入期望*iterables的函数以计算笛卡尔积?

解决itertools.product处理列表的列表的问题

这个场景我之前也碰到过,其实核心就是利用Python的参数解包技巧就能搞定!当你把多个子列表存到一个大列表里时,直接传入product会被当作单个参数处理,这时候只需要用***运算符**来解包这个大列表就行。

具体实现步骤

只需要在传入列表vs的时候加上*,把里面的每个子列表拆解成独立参数传给product:

import itertools

v1=['a','b','c']
v2=['1','2']
v3=['x','y','z']

# 把所有子列表存入一个大列表
vs = [v1, v2, v3]
# 用*解包vs,让每个子列表作为独立参数传入product
result = list(itertools.product(*vs))
print(result)

运行这段代码后,就能得到你预期的笛卡尔积结果:

[('a', '1', 'x'), ('a', '1', 'y'), ('a', '1', 'z'), ('a', '2', 'x'), ('a', '2', 'y'), ('a', '2', 'z'), ('b', '1', 'x'), ('b', '1', 'y'), ('b', '1', 'z'), ('b', '2', 'x'), ('b', '2', 'y'), ('b', '2', 'z'), ('c', '1', 'x'), ('c', '1', 'y'), ('c', '1', 'z'), ('c', '2', 'x'), ('c', '2', 'y'), ('c', '2', 'z')]

原理说明

*在这里是可迭代对象解包运算符,它会把vs里的每个元素(也就是你的子列表v1、v2、v3)分别作为单独的参数传递给product函数,效果和你直接写itertools.product(v1, v2, v3)完全一致。哪怕你的子列表数量是动态变化的(比如从外部读取、用户生成的),这种方法也能完美适配,不用关心具体有多少个子列表。

内容的提问来源于stack exchange,提问作者mhwombat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 21:02:43