gpt4 book ai didi

python - 重写一个函数,该函数创建具有固定总和的数字组合作为生成器

转载 作者:行者123 更新时间:2023-11-28 18:08:54 27 4
gpt4 key购买 nike

我想在 Python 中将递归函数转换为生成器。目前,我有这个功能来创建具有固定总和的数字组合,

def combinations_fixed_sum(fixed_sum, length_of_list, lst=[]):
if length_of_list == 1:
lst += [fixed_sum]
print(lst)
else:
for i in range(fixed_sum+1):
combinations_fixed_sum(i, length_of_list-1, lst + [fixed_sum-i])

print 语句是我要返回给生成器的部分。这可能吗?

最佳答案

您可以使用 yield 将单个结果返回给调用者。可以使用 yield from 处理递归,它将从嵌套生成器中生成所有值:

def combinations_fixed_sum(fixed_sum, length_of_list, lst=[]):
if length_of_list == 1:
lst += [fixed_sum]
yield lst
else:
for i in range(fixed_sum+1):
yield from combinations_fixed_sum(i, length_of_list-1, lst + [fixed_sum-i])

print(list(combinations_fixed_sum(4, 2)))

输出:

[[4, 0], [3, 1], [2, 2], [1, 3], [0, 4]]

请注意,yield from 仅适用于 Python 3,如果您使用的是 Python 2.x,则需要单独生成值:

def combinations_fixed_sum(fixed_sum, length_of_list, lst=[]):
if length_of_list == 1:
lst += [fixed_sum]
yield lst
else:
for i in range(fixed_sum+1):
for x in combinations_fixed_sum(i, length_of_list-1, lst + [fixed_sum-i]):
yield x

关于python - 重写一个函数,该函数创建具有固定总和的数字组合作为生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51908760/

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