首页 > 解决方案 > 如何让 random.choice 返回 2 个不同的值?

问题描述

我在 random.choice 中使用权重,所以如果我在选择后删除,恐怕会弄乱权重。pop_fit_sorted 是一个使用 numpy 的数组数组,而百分比是一个带有权重的数组。

parents_list = random.choices(pop_fit_sorted, weights=percentage, k=2)

这就是我正在使用的代码。但它有时可以选择同一个数组两次。如何始终选择 2 个不同的数组?

标签: pythonpython-3.xrandom

解决方案


关于random.choices() 的注意事项:

在进行选择之前,相对权重会转换为累积权重。

因此,您可以执行以下操作:

items = {1:0.6, 2:0.3, 3:0.1}
el1 = random.choices(list(items.keys()), weights=list(items.values()), k=1)[0]
items[el1] = 0
el2 = random.choices(list(items.keys()), weights= list(items.values()), k=1)[0]

确保获得 2 个不同的元素。

或者,按照建议,您可以使用numpy.random.choice()

np.random.choice(list(items.keys()), replace=False, size=2, p=list(items.values()))

但在这种情况下,您需要将权重转换为概率。


推荐阅读