Python 并非所有排列都包括在内[itertools,排列]

Python 并非所有排列都包括在内[itertools,排列],python,Python,在我下面的代码中,给出了一个列表(硬币),从该列表中,它打印出硬币中3个数字之和的所有排列,总计为65 但是,在我看来,它还应该打印数字30、30和5的排列: (30, 30, 5) (30, 5, 30) (5, 30, 30) 现在它将只打印: (50, 10, 5) (50, 5, 10) (10, 50, 5) (10, 5, 50) (5, 50, 10) (5, 10, 50) 我的代码: coins = [50, 30, 10, 5] from itertools impo

在我下面的代码中,给出了一个列表(硬币),从该列表中,它打印出硬币中3个数字之和的所有排列,总计为65

但是,在我看来,它还应该打印数字30、30和5的排列:

(30, 30, 5) 
(30, 5, 30)
(5, 30, 30)
现在它将只打印:

(50, 10, 5)
(50, 5, 10)
(10, 50, 5)
(10, 5, 50)
(5, 50, 10)
(5, 10, 50)
我的代码:

coins = [50, 30, 10, 5]

from itertools import permutations

perm = permutations(coins, 3)


for i in list(perm):
    if sum(i)==65:
        print(i)

如何在不将这些排列添加到代码中的情况下将其包括在内?

您的列表中只有一个
30
<代码>排列只会排列列表中的现有元素

您可以将列表与您选择的每个排列的长度相乘,然后添加一个
set()
包装以删除重复项:

from itertools import permutations

coins = [50, 30, 10, 5]

for i in set(permutations(coins * 3, 3)):
    if sum(i) == 65:
        print(i)
输出:

(5, 50, 10)
(50, 5, 10)
(30, 5, 30)
(5, 30, 30)
(10, 5, 50)
(30, 30, 5)
(5, 10, 50)
(10, 50, 5)
(50, 10, 5)

您需要
产品
而不是
排列

from itertools import product

coins = [50, 30, 10, 5]

prod = product(coins, repeat = 3)

for i in prod:
    if sum(i) == 65:
        print(i)