gpt4 book ai didi

Python配分函数

转载 作者:太空宇宙 更新时间:2023-11-03 21:35:21 24 4
gpt4 key购买 nike

我有以下代码,该代码是根据之前在此网站上发布的代码改编的。它是分区函数的变体,输出所有可能的数字组合,这些数字的总和达到指定的总和,但它将可用于总和的数字限制为有限的输入列表。

def part(nr, Nums):
nrs = sorted(Nums, reverse=True)

def inner(n, i):
if n == 0:
yield []
for k in range(i, len(nrs)):
if nrs[k] <= n:
for rest in inner(n - nrs[k], k):
yield [nrs[k]] + rest

return list(inner(nr, 0))


#List of numbers to form the sums.
Nums = [5,6 ,7 ,8, 9, 10]

#the total that the numbers add up to.
total = 32

tr = part(total, Nums)

print(f"{len(tr)} Combination of {Nums} in {total} are:")
print(tr)

结果:

24 32 中的 [5, 6, 7, 8, 9, 10] 的组合是:

[[10, 10, 7, 5], [10, 10, 6, 6], [10, 9, 8, 5], [10, 9, 7, 6], [10, 8, 8, 6], [10, 8, 7, 7], [10, 7, 5, 5, 5], [10, 6, 6, 5, 5], [9, 9, 9, 5] , [9, 9, 8, 6], [9, 9, 7, 7], [9, 8, 8, 7], [9, 8, 5, 5, 5], [9, 7, 6, 5, 5], [9, 6, 6, 6, 5], [8, 8, 8, 8], [8, 8, 6, 5, 5], [8, 7, 7, 5, 5] , [8, 7, 6, 6, 5], [8, 6, 6, 6, 6], [7, 7, 7, 6, 5], [7, 7, 6, 6, 6], [ 7, 5, 5, 5, 5, 5], [6, 6, 5, 5, 5, 5]]

进程已完成,退出代码为 0

一切都按预期工作,但我想更改它,以便每个数字在每种可能的组合中只能使用一次或根本不使用。

例如:“[10, 8, 7, 7], [10, 7, 5, 5, 5]”,这些组合和不会被输出,因为它们分别包含重复的七和五。

我试图保留生成器函数,因为我被告知它们比列表具有更好的性能,并且将来我可能会对更大的列表和求和使用相同的函数。但我不知道如何检查生成器是否有重复数字以消除包含重复数字的子列表。

谢谢。

最佳答案

您可以将第 7 行更改为:for k in range(i + 1, len(nrs)):

关于Python配分函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53274108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com