python itertool组合列表不完整

时间:2018-11-06 14:32:04

标签: python combinations itertools

我有一个包含11个元素的列表,我需要所有可能的长度为4的元组。因此,我在Itertools中找到了函数combinations

但是,它只传递了210个元组,而不是11 ^ 4 =14641。我使用print函数进行了检查,其中许多都丢失了。

我该怎么办,或者出了什么问题?

atom = [0, 5, 6, 12, 10, 13, 11, 9, 1, 2]
atoms = list(itertools.combinations(atom,4))

3 个答案:

答案 0 :(得分:4)

combinations给您元组以排序的顺序,没有重复。听起来您好像想要itertools.product

from itertools import product
atom = range(11)

print(len(list(product(atom, repeat=4))))
# 14641

答案 1 :(得分:0)

确定-您将获得列表的所有组合(包含10个元素)。 combinations返回列表中所有不同的无序数字,共4个元素。

可能的组合数量是4上的10个-这是(10 * 9 * 8 * 7/4 * 3 * 2 * 1)-恰好是210。

另请参阅Combinations Calculator

permuations可能就是您想要的-它返回所有有序组合-例如在这种情况下,它将产生[0 5 6 12],[5 0 6 12],而combinations仅产生[0 5 6 12]。

但是permutations也不是11 ^ 4,而是10 * 9 * 8 * 7个元素。在您的情况下,正确的值可能是10 ^ 4-而且,如果您真的想要类似[0,0,0,0],[0,0,0的内容,则必须使用product ,5]等。

答案 2 :(得分:-1)

您在寻找permutation而不是combination。组合不返回

  

[1、2、3、4]和[1、3、2、4]

它们仅返回不同的值集。您可以按照以下方式使用排列

list(itertools.permutations(atoms, 4))

如果您想获取诸如follow之类的值

  

[1、1、1、2]和[1、1、2、1]

您需要像@Patrick Haugh提到的那样写product