gpt4 book ai didi

python - 使每个数字的值不超过 90

转载 作者:行者123 更新时间:2023-12-04 09:27:47 24 4
gpt4 key购买 nike

我有一个生成随机数并将它们放在列表中的代码。这些数字的总和必须遵循定义的值(在本例中为 6066)。列表中的数字也必须是一定数量的,这意味着我希望将95个数字随机生成到一个列表中,并且列表中这95个数字的值的总和等于6066。
编码 :

import random

def num(n, total):


dividers = sorted(random.sample(range(1, total), n - 1))
j= [a - b for a, b in zip(dividers + [total], [0] + dividers)]


return j



i=num(95,6066)


print (i)
我面临的问题是我不希望列表中 95 个数字的任何值超过 85。我该怎么做?
我试过了:
import random

def num(n, total):


dividers = sorted(random.sample(range(1, total), n - 1))
j= [a - b for a, b in zip(dividers + [total], [0] + dividers)]
for k in j:
if k>85:
j.remove(k)



return j



i=num(95,6066)


print (i)
但这只会从列表中删除超过 85 的数字,我需要在列表中有 95 个数字,总计 6066

最佳答案

一种解决方案是考虑这样的问题,例如您试图在 95 个存储桶之间分配 6066 个项目,每个存储桶的容量为 85,因此您只需循环这些项目,每次选择一个尚未满的存储桶。
这是一个简单的实现。它不会特别快,但它避免了回溯的需要,因为没有违反规则的可能性(总和不正确或单个值超过最大值)。
请注意,在您的规则中同样有效的其他解决方案可能具有不同的概率分布,但您没有说明您需要什么样的概率分布。

import random

def num(n, total, maxv):

if total > n * maxv:
raise ValueError("incompatible requirements")

vals = [0 for _ in range(n)]
not_full = list(range(n))

for _ in range(total):
index = random.choice(not_full)
vals[index] += 1
if vals[index] == maxv:
not_full.remove(index)

return vals

answer = num(95, 6066, 85)

print(answer)
print(max(answer))
print(sum(answer))
给出:
[59, 59, 73, 63, 77, 58, 54, 71, 73, 67, 69, 67, 58, 79, 63, 59, 80, 58, 77, 64, 62, 64, 54, 50, 64, 72, 62, 69, 81, 61, 63, 50, 65, 56, 60, 51, 59, 61, 63, 56, 67, 69, 69, 64, 85, 66, 74, 66, 63, 63, 63, 68, 84, 66, 53, 82, 59, 66, 63, 58, 67, 58, 59, 58, 69, 56, 63, 61, 73, 58, 65, 60, 61, 53, 68, 51, 58, 57, 67, 60, 65, 73, 63, 59, 62, 49, 66, 59, 64, 56, 69, 58, 61, 67, 74]
85
6066

关于python - 使每个数字的值不超过 90,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62946516/

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