【问题标题】:Randomly select an element from a list, but the lower an element is, the more chance it has to be selected从列表中随机选择一个元素,但元素越低,被选中的机会越大
【发布时间】:2021-03-13 00:44:35
【问题描述】:

我想从列表中随机选择一个项目。但不同的是,列表中的元素拥有的索引越高,它被选中的可能性就越大。在列表中随机选择一个项目后,我想将该项目存储到一个名为 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.x random


    【解决方案1】:

    Python 3.6 中的新功能。对于以前的 Python 版本see here

    您可以使用random.choices()中的weightscum_weights参数根据相对权重进行选择。

    由于您希望对存在于较高索引处的元素进行较大的选择更改,您可以使您的权重基于索引。

    weights = [i for i in range(1, len(links) + 1)]
    

    在内部,在进行选择之前,相对权重 (weights) 会转换为累积权重 (cum_weights)。

    random.choices(links, weights=weights)
    

    注意:如果提供了weights 序列,它必须与样本序列的长度相同。

    【讨论】:

      猜你喜欢
      • 2023-01-11
      • 2014-02-07
      • 2011-05-29
      • 2013-10-19
      • 2021-12-30
      • 2014-06-19
      • 1970-01-01
      • 2017-05-11
      • 2014-07-23
      相关资源
      最近更新 更多