多个列表的有效组合(Python)



我正在尝试找出最有效的方法,以获取Python(3)中多个列表(未知的数字)组合的组合列表。例如,如果我有一个冠军列表:

a = [[0, 1, 2], [0], [0, 1]]

我期望以下输出:

[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 1, 1), (0, 1, 2)]

目前,我拥有的最好方法是使用itertools.product()首先生成三个列表的所有可能排列,对排列的内容进行排序,然后取下这些项目的集合,然后最终对该设置进行排序:

tuples = it.product(*a)
tuples_sorted = [tuple(sorted(i)) for i in tuples]
output = sorted(set(tuples_sorted))

这很好,但是我想知道这样做的效率更高还是内置的方式?我可以想象,多个分类步骤对于大量的统一者或非常长的统一者来说确实很麻烦。我也对Numpy解决方案开放。

您要求的是多个列表的笛卡尔产品。这样做了:

import itertools
>>> a2 = [list(element) for element in itertools.product(*a)]
>>> for i in range(0,len(a2)):
...     aa = a2[i]
...     aa.sort()
...     a2[i] = tuple(aa)
... 
>>> a3=[ii for n,ii in enumerate(a3) if ii not in a2[:n]]
>>> a3
[(0, 0, 0), (0, 0, 1), (0, 1, 1), (0, 0, 2), (0, 1, 2)]

根据笛卡尔产品的答案和此独特的列表答案。

最新更新