我有一个包含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))
答案 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。
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