如何从Python列表中生成所有可能的数字排列?

问题描述 投票:1回答:3

问题:给定3个数字的列表[4, 8, 15]生成所有可能的数字排列的列表。

这是我能收集的3*3*3 = 27独特条目。就像是:

4,4,4
4,4,8
4,4,15
4,8,4
4,8,8
4,8,15
4,15,4
4,15,8
4,15,15
...

我尝试使用itertools.permutationsitertools.combinations,但我无法获得所有27个值。

例如,list(itertools.permutations([4,8,15],3))只打印6个值:

[(4, 8, 15), (4, 15, 8), (8, 4, 15), (8, 15, 4), (15, 4, 8), (15, 8, 4)]

有没有可以开箱即用的东西,或者这更像是“滚动你自己”的问题?

python permutation
3个回答
1
投票

你在permutationsproduct混淆:

len(list(itertools.permutations([4,8,15],3)))
# return 6
len(list(itertools.product([4,8,15], repeat=3)))
# return 27

0
投票

答案仍然在itertools。名为product的函数可以解决问题;它需要两个参数:第一个是具有可用元素的iterable,第二个是iterable可以重复自身的次数。

itertools.product([4,8,15],repeat=3)会在你的例子中返回你想要的排列。

permutationscombinations不适合你的原因是因为他们不允许物品重复; product计算笛卡尔积,允许重复项目。


0
投票

此代码打印您要求的:)

list = [4,8,15]

for i in range(len(list)):
    for j in range (len(list)):
        for k in range (len(list)):
            print ("("+str(list[i]) +","+str(list[j])+","+str(list[k])+")\n")
© www.soinside.com 2019 - 2024. All rights reserved.