有以下元组:t = (('x', (1, 2, 3), ('A', 'B')), ('y', (5, 6), ('E', 'G')))如何将元组制成笛卡尔,如下所示:(('x', 1, 'A'), ('x', 1, 'B'), ('x', 2, 'A'), ... ('y', 6, 'G')以下不起作用:from itertools import product[(product(zip(a[0], a[1], a[2]))) for a in t]
2 回答

喵喵时光机
TA贡献1846条经验 获得超7个赞
无需使用zip,只需解压每个元组:
from itertools import product
data = (('x', (1, 2, 3), ('A', 'B')), ('y', (5, 6), ('E', 'G')))
result = [p for tup in data for p in product(*tup)]
for p in result:
print(p)
输出
('x', 1, 'A')
('x', 1, 'B')
('x', 2, 'A')
('x', 2, 'B')
('x', 3, 'A')
('x', 3, 'B')
('y', 5, 'E')
('y', 5, 'G')
('y', 6, 'E')
('y', 6, 'G')

繁星淼淼
TA贡献1775条经验 获得超11个赞
这是 XY 问题的一个极端例子。
你到底为什么想要那个?我真的认为你真正的问题是完全不同的,强烈建议你问问你真正打算做什么。
但只是为了满足形式,这里有一个方法:
from itertools import chain, starmap, product
tuple(chain.from_iterable(starmap(product, t)))
添加回答
举报
0/150
提交
取消