编辑:我混淆了排列和组合之间的区别。编辑问题只是为了保持它(因为我无法删除它)。虽然我意识到了我的错误。
我一直在浏览这个问题,但找不到适合我正在寻找的唯一解决方案。
基本概念是如果我运行一个函数gen_permutations([1,2])来生成排列。我会得到结果([1,2],[2,1]),尽管在这个结果中,我会将它们归类为同一组。
我会考虑检查一些东西,result[0] < result[1]然后将其添加到结果集中。但是,例如,这将如何扩大规模gen_permutations(input, size=n | n <= len(input))?
对不起,如果有一个问题对此有答案,但所有“类似问题”都指出我只是“独特的结果”,其中 [1,2] != [2,1]。
编辑:混淆案例,该函数gen_permutations只是我在这里找到并使用的通用生成器How to generate all permutations of a list in Python
另一个让它变大的例子。我可以运行这个案例
for i in permutations([1,2,3,4],3):
print i
Run Code Online (Sandbox Code Playgroud)
得到结果
(1, 2, 3), (1, 2, 4),(1, 3, 2),(1, 3, 4),(1, 4, 2),(1, 4, 3),(2, 1, 3),(2, 1, 4),(2, 3, 1),(2, 3, 4),(2, 4, 1),(2, 4, 3),(3, 1, 2),(3, 1, 4),(3, 2, 1),(3, 2, 4),(3, 4, 1),(3, 4, 2),(4, 1, 2),(4, 1, 3),(4, 2, 1),(4, 2, 3),(4, 3, 1),(4, 3, 2)
虽然(1,2,3)和(3,2,1)我会考虑不是唯一的。因为如果您重新排序它们,它们将是同一组。我需要帮助的代码,不会产生结果排列的发电机(3,2,1)作为(1,2,3)已经产生。
您在寻找组合吗?在数学中,组合不关心顺序,所以 [1,2] 等于 [2,1]。这篇文章解释了更多。
在python中,您可以简单地执行以下操作:
import itertools
list(itertools.combinations([1,2], 2))
Run Code Online (Sandbox Code Playgroud)
这给出了输出:
[(1,2)]
Run Code Online (Sandbox Code Playgroud)