不同子列表项的可能集合,每个子列表有一个元素

  • 本文关键字:列表 有一个 集合 元素 python
  • 更新时间 :
  • 英文 :


我正在寻找一种方法,在不事先知道列表和子列表长度的情况下,获得列表中包含的所有子列表的单个元素的组合。让我通过下面的两个例子来说明我的意思。我有两个列表(myList1myList2(,想要获得两个组合集(setsCombo1setsCombo1(:

myList1    = [['a'], [1, 2, 3], ['X', 'Y']]
setsCombo1 = [['a', 1, 'X'],
['a', 1, 'Y'],
['a', 2, 'X'],
['a', 2, 'Y'],
['a', 3, 'X'],
['a', 3, 'Y']]
myList2    = [['a'], [1, 2, 3], ['X', 'Y'], [8, 9]]
setsCombo2 = [['a', 1, 'X', 8],
['a', 1, 'X', 9],
['a', 1, 'Y', 8],
['a', 1, 'Y', 9],
['a', 2, 'X', 8],
['a', 2, 'X', 9],
['a', 2, 'Y', 8],
['a', 2, 'Y', 9],
['a', 3, 'X', 8],
['a', 3, 'X', 9],
['a', 3, 'Y', 8],
['a', 3, 'Y', 9]]

我稍微研究了一下itertools,但没能很快找到合适的东西。。。

itertools.product与拆包*(几乎(可以做到:

>>> from itertools import product
>>> list(product(*myList1))
[('a', 1, 'X'),
('a', 1, 'Y'),
('a', 2, 'X'),
('a', 2, 'Y'),
('a', 3, 'X'),
('a', 3, 'Y')]

为了将内部元素强制转换为列表,我们map:

>>> list(map(list, product(*myList1)))
[['a', 1, 'X'],
['a', 1, 'Y'],
['a', 2, 'X'],
['a', 2, 'Y'],
['a', 3, 'X'],
['a', 3, 'Y']]

相关内容