获取特定长度的元素组合

54

编辑:

这不是如何获取列表元素的所有可能组合?的精确重复。

这个主题是关于找到唯一的组合,而另一个主题是关于找到所有的组合。

如果我有一个Python列表:

 L = [1,2,3,4]

如何最好地从以下列表中获取所有可能的3个元素的唯一组合:

["1,2,3", "1,2,4", "2,3,4", "3,4,1"]

组合中元素的顺序并不重要。例如,"1,2,3"和"3,2,1"将被视为相同的组合。

我可能会写几个循环来完成这个任务,但我认为可能有一行代码也能做到同样的效果。


这个问题本来不应该以它现在的方式被关闭为重复问题,或者至少应该被重新打开。然而,在 Stack Overflow 上已经有人问过超过一次了。我将其重新链接为另一个重复问题,因为那个问题得到了更高质量的答案。 - Karl Knechtel
1个回答

74

你需要使用itertools.combinations

>>> from itertools import combinations
>>> L = [1, 2, 3, 4]
>>> [",".join(map(str, comb)) for comb in combinations(L, 3)]
['1,2,3', '1,2,4', '1,3,4', '2,3,4']

7
有趣的是,这将根据可迭代对象中的位置而不是值为基础为您提供唯一组合。具体解释可以查看文档,例如: from itertools import combinations L = [1, 2, 3, 4, 4] [",".join(map(str, comb)) for comb in combinations(L, 3)] - mloning

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接