Python 并非所有排列都包括在内[itertools,排列]
在我下面的代码中,给出了一个列表(硬币),从该列表中,它打印出硬币中3个数字之和的所有排列,总计为65 但是,在我看来,它还应该打印数字30、30和5的排列: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
(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)