python-3.x - 从列表中随机选择一个元素,但元素越低,被选中的机会越大
问题描述
我想从列表中随机选择一个项目。但不同的是,列表中的元素拥有的索引越高,它被选中的可能性就越大。在列表中随机选择一个项目后,我想将该项目存储到一个名为link
.
我没有尝试很多不同的方法,因为我不知道从哪里开始。但这就是我目前拥有的:
import random
# A list of Youtube links ( I won't show the YT links )
links = ['link1 :D',
'link2 :D',
'link3 :D'
]
link = random.choice(links)
使用上面的代码,我只能从变量中的项目中获得随机(或伪随机)结果links
。我如何编写代码以便它有更高的选择(但仍然是随机的)具有更大索引的项目?
如果我不清楚,这里有一个例子:
# List of 3 links
links = ['link1', # index: 0
'link2', # index: 1
'link3' # index: 2]
由于link3
它的最高索引为 2,因此它被随机选择器选中的可能性最高。link2
具有第二高的指数,因此它被选中的机会比 多link1
,但被选中的机会比 少link3
。
解决方案
Python 3.6中的新功能。对于以前的 Python 版本,请参见此处。
您可以使用weights
或cum_weights
参数random.choices()
根据相对权重进行选择。
由于您希望对较高索引处的元素的选择进行较大更改,因此您可以使权重索引基于。
weights = [i for i in range(1, len(links) + 1)]
在内部,在进行选择之前,相对权重 ( weights
) 会转换为累积权重 ( )。cum_weights
random.choices(links, weights=weights)
注意:如果weights
提供了一个序列,它必须与样本序列的长度相同。
推荐阅读
- angular - 如何使用 angularfire2 提供两个单独的身份验证服务
- kubernetes - 使用 Google Serverless VPC 访问具有云功能的 GKE pod
- javascript - Bootstrap 示例中未显示数据表按钮
- javascript - 使用 Google Drive Picker UI 时随机出现“要选择项目,请登录”问题
- docker - 如何为非 docker Jenkins master 创建 docker slave 构建
- php - 提交表单按钮后重定向到 2 个不同的页面
- python - 预期 2 个值得到一个函数
- cassandra-3.0 - 如何在 Embedded-Cassandra 中获取特定版本的 Cassandra
- sql - 为“stat”多次指定了“30”列
- java - 为什么即使启用了 Wi-Fi 呼叫,方法 telephonyManager.getVoiceNetworkType() 也会返回 Network_LTE 的值?