有以下元組: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貢獻(xiàn)1846條經(jīng)驗 獲得超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貢獻(xiàn)1775條經(jīng)驗 獲得超11個贊
這是 XY 問題的一個極端例子。
你到底為什么想要那個?我真的認(rèn)為你真正的問題是完全不同的,強烈建議你問問你真正打算做什么。
但只是為了滿足形式,這里有一個方法:
from itertools import chain, starmap, product
tuple(chain.from_iterable(starmap(product, t)))
添加回答
舉報
0/150
提交
取消