我有一个列表如下:
i = [
{'id': '1', 'P': 0.5},
{'id': '2', 'P': 0.4},
{'id': '3', 'P': 0.8},
...
{'id': 'x', 'P': P(x)}
]
当我执行以下操作时:
i.sort(key=lambda x: x['P'], reverse=True)
列表根据 P 排序,其中具有最大 P 的元素排在前面。但是如果我想让它看起来是随机的,这样即使 P 值很小(概率很小)的元素也可以成为列表中的第一项怎么办?
是否可以使用 sort() 函数来实现它,还是我必须自己编写?
请您参考如下方法:
正如我在评论中提到的,您可以通过从标准正态分布中抽取偏差因子来根据随机偏差水平进行排序。然后,您可以将此偏差(零的两侧对称)添加到您的 P 值。
import numpy as np
#Give some control over the level of rearrangement - larger equals more rearrangement
bias_factor = 0.5
i.sort(key=lambda x: x['P'] + np.random.randn()*bias_factor, reverse=True)
或者如果你只想使用标准库:
from random import gauss
#Give some control over the level of rearrangement - larger equals more rearrangement
sigma = 0.5
i.sort(key=lambda x: x['P'] + gauss(0, sigma), reverse=True)
