0

我有三个列表(L1、L2、L3),例如:

L1 = [1,2]
L2 = ['a','b']
L3 = ['A','B']

我想计算 L1*L2*L3 的乘积,id est,

itertools.product(L1,L2,L3) = [ [1,'a','A'], [1,'a','B'], ... ]

但我想考虑或不考虑一些清单;因此,[1,], [ 1, 'a' ] 将是结果的一部分,如 ['a',], ['a', 'B'] 等等。

有什么想法可以帮助我吗?谢谢 !

4

1 回答 1

3

使用itertools 示例powerset中给出的函数。将为您提供 3 个列表的所有子集。对于每个子集,您可以获取笛卡尔积,然后将它们链接在一起。powerset([L1,L2,L3])

>>> from itertools import chain, product
>>> result = chain.from_iterable(product(*lists) for lists in powerset([L1,L2,L3]))        
>>> list(result)

[(), (1,), (2,), ('a',), ('b',), ('A',), ('B',), (1, 'a'), (1, 'b'), (2, 'a'), 
(2, 'b'), (1, 'A'), (1, 'B'), (2, 'A'), (2, 'B'), ('a', 'A'), ('a', 'B'), 
('b', 'A'), ('b', 'B'), (1, 'a', 'A'), (1, 'a', 'B'), (1, 'b', 'A'), 
(1, 'b', 'B'), (2, 'a', 'A'), (2, 'a', 'B'), (2, 'b', 'A'), (2, 'b', 'B')]
于 2013-03-28T23:14:17.270 回答