首页 > 解决方案 > 生成 N 个伪随机整数的列表,从特定范围中提取,列表总和为特定值

问题描述

在 Python 中:

如何生成 N 个(例如 10 个)伪随机整数列表,每个整数都取自特定范围(例如 3 到 9 之间),列表总和为特定值(例如 58)?

对于此示例,解决方案如下所示:

solution = [3, 7, 7, 9, 3, 6, 4, 8, 8, 3]

sum(solution)
58

即 10 个数字,每个数字在 3 到 9 之间,总和为 58。

我已经尝试了一种解决方法,np.random.dirichlet或者np.random.multinomial按照此处相关问题中的建议,但这些方法不允许从特定范围内选择整数。

标签: pythonlist

解决方案


import random

N = 10
s = 58
i, j = 3, 9

out = [i] * N

while sum(out) != s:
    idx = random.randint(0, N-1)
    if out[idx] < j:
        out[idx] += 1

print(out)

打印(例如):

[9, 7, 6, 4, 5, 8, 3, 5, 5, 6]

推荐阅读