首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多个列表的有效组合(Python)

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

Stack Overflow用户
提问于 2017-03-09 06:55:47
回答 1查看 405关注 0票数 2

我正在尝试找出在Python (3)中获得多个列表项(数量事先未知)的项组合的排序列表的最有效方法。例如,如果我有一个子列表列表:

代码语言:javascript
运行
复制
a = [[0, 1, 2], [0], [0, 1]]

我希望得到以下输出:

代码语言:javascript
运行
复制
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 1, 1), (0, 1, 2)]

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

代码语言:javascript
运行
复制
tuples = it.product(*a)
tuples_sorted = [tuple(sorted(i)) for i in tuples]
output = sorted(set(tuples_sorted))

这种方法工作得很好,但我想知道是否有更有效的或内置的方法来做这件事?我可以想象,对于大量的子列表,或者对于非常长的子列表,多个排序步骤变得非常麻烦。我也对numpy解决方案持开放态度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-28 04:10:34

您所要求的是多个列表的有序笛卡尔乘积。它是这样做的:

代码语言:javascript
运行
复制
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)]

改编自this Cartesian product answerthis unique list answer

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42683521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档