我怎样才能使random.choice返回2个不同的值?

时间:2018-09-09 21:08:38

标签: python python-3.x random

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

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

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

1 个答案:

答案 0 :(得分:0)

关于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()))

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