你可以利用
itertools.chain.from_iterable
和
itertools.product
来获取笛卡尔积,像这样:
>>> from itertools import chain, product
>>> from pprint import pprint
>>> pprint([tuple(chain.from_iterable(i)) for i in product(l2, [l1[0]], l3)])
[('x', 'a', 'b', 'c', 'm'),
('x', 'a', 'b', 'c', 'n'),
('y', 'a', 'b', 'c', 'm'),
('y', 'a', 'b', 'c', 'n'),
('z', 'a', 'b', 'c', 'm'),
('z', 'a', 'b', 'c', 'n')]
您正在计算
l1
的第一个元素、
l2
和
l3
之间的笛卡尔积。由于结果将是一个包含来自
l2
(字符串)和
l1
的第一个元素(元组)以及来自
l3
(字符串)的元素的元组,因此我们使用
chain.from_iterable
对其进行扁平化处理。
假设我们不对元组进行扁平化处理,那么您将会得到以下结果。
>>> pprint([tuple(items) for items in product(l2, [l1[0]], l3)])
[('x', ('a', 'b', 'c'), 'm'),
('x', ('a', 'b', 'c'), 'n'),
('y', ('a', 'b', 'c'), 'm'),
('y', ('a', 'b', 'c'), 'n'),
('z', ('a', 'b', 'c'), 'm'),
('z', ('a', 'b', 'c'), 'n')]
这就是为什么我们使用
chain.from_iterable
并展开元组的原因。
l1
中的第一个元组,对吗? - Zero Piraeus