gpt4 book ai didi

python - 划分和分配结果

转载 作者:太空宇宙 更新时间:2023-11-03 15:32:08 25 4
gpt4 key购买 nike

我正在做一个小项目,我想知道是否有任何简单的方法可以做到这一点。

我有一个数字 (4.5),我想在 X 个部分之间平均分配(X 是一个可变数字)。棘手的部分是该值可以是:0、0.25、0.50、0.75 或 1。

这里是一个期望输出的例子:

Number = 4.5

X = 5

result=[1,1,1,0.75,0.75]

有什么简单的方法吗?

提前致谢。

最佳答案

假设你的有效值是等距的,并且给定的数字总是可以表示为这些值的线性组合,你可以这样做:

def divide_number(number, parts, unit):
number_units = round(number / unit)
units_per_part = number_units // parts
remainder_units = number_units % parts
return [unit * ((units_per_part + 1) if i < remainder_units else units_per_part)
for i in range(parts)]

print(divide_number(4.5, 5, 0.25))
# [1.0, 1.0, 1.0, 0.75, 0.75]

如果您想使用任意一组分割值获得所有可能的组合,您可以使用如下递归算法:

def divide_number(number, parts, units, eps=1e-8):
current = []
units = sorted(set(units))
yield from _divide_number_rec(number, parts, units, 0, current, eps)

def _divide_number_rec(number, parts, units, i_unit, current, eps):
if parts <= 0:
yield tuple(current)
else:
for i in range(i_unit, len(units)):
unit = units[i]
if number > unit - eps and number - unit < (parts - 1) * units[-1] + eps:
current.append(unit)
yield from _divide_number_rec(number - unit, parts - 1, units, i, current, eps)
current.pop()

units = [0, 0.25, 0.5, 0.75, 1]
# Get one valid combination
print(next(divide_number(4.5, 5, units)))
# (0.5, 1, 1, 1, 1)
# Get all valid combinations
print(*divide_number(4.5, 5, units), sep='\n')
# (0.5, 1, 1, 1, 1)
# (0.75, 0.75, 1, 1, 1)

原则上,这比遍历所有可能的组合在计算上花费更少,因为许多组合在不可行时会被删减,尽管对于不是很大的问题,可能不会有显着差异。

关于python - 划分和分配结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57414575/

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