制作元组的笛卡尔不起作用

有以下元组:


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]


桃花长相依
浏览 156回答 2
2回答

喵喵时光机

无需使用zip,只需解压每个元组:from itertools import productdata = (('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')

繁星淼淼

这是 XY 问题的一个极端例子。你到底为什么想要那个?我真的认为你真正的问题是完全不同的,强烈建议你问问你真正打算做什么。但只是为了满足形式,这里有一个方法:from itertools import chain, starmap, producttuple(chain.from_iterable(starmap(product, t)))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python