python - 生成 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
按照此处相关问题中的建议,但这些方法不允许从特定范围内选择整数。
解决方案
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]
推荐阅读
- r - 在 flexdashboard 中使用 highchart 渲染交互式树形图
- emacs - 找不到 magit-define-popup-option
- r - 填充前一行后,使用 gs_edit_cells 递增到新行
- bash - 如何在 grep 中将多行视为一个结果,或者至少在不改变的情况下过滤
- elasticsearch - 弹性搜索词序
- r - 将列表列添加到数据框
- javascript - React 将其链接为地图内的状态
- raspberry-pi3 - 是否可以通过 OpenPLC ModBus 控制 %QX0.0 LED 灯?
- sql - 如何修复“用于插入的 Sql 触发器不适用于声明变量”
- azure - 无法使用用户分配的托管标识检索 keyvault 机密