Python 根据均匀分布从列表中随机选取数字

Python 根据均匀分布从列表中随机选取数字,python,random,Python,Random,我有一份这样的清单 a = [.5,.57,.67,.8,1,1.33,2,4] 当绘制时,它是这样的: 我需要在这个列表中随机选择一个数字。在Python中,我通常会这样做: c = random.choice(a) 除了。。。这样做会使拾取偏向较低的值(密度在1左右高于4左右) 我将如何根据统一分布选择列表条目。与c=random.random()*3.5+.5一样,但实际上是从列表中选取的?您可以从均匀分布中获得浮动,然后选择列表中最接近此生成值的浮动。像这样: a = [.5,.5

我有一份这样的清单

a = [.5,.57,.67,.8,1,1.33,2,4]
当绘制时,它是这样的:

我需要在这个列表中随机选择一个数字。在Python中,我通常会这样做:

c = random.choice(a)
除了。。。这样做会使拾取偏向较低的值(密度在1左右高于4左右)


我将如何根据统一分布选择列表条目。与c=random.random()*3.5+.5一样,但实际上是从列表中选取的?

您可以从均匀分布中获得浮动,然后选择列表中最接近此生成值的浮动。像这样:

a = [.5,.57,.67,.8,1,1.33,2,4]
p = map(lambda x: abs(random.uniform(0,4) - x), a)
c = a[p.index(min(p))]

当然,如果列表已排序,则可以更有效地执行此操作。

所选的值是否必须是列表的元素?否则,根据您的数据,最终的选择仍然会有偏差。。。从某种程度上说,它要么是离散的,要么是连续的。也许你可以在这个时间间隔内选择一个随机浮点,然后检索列表中最接近该值的元素。是的,它必须是列表中的一个元素的确,@mescarra,这样做的最佳方式是什么?重复?您可以在节之间进行分离(例如0-4),随机化节,然后在节内随机化。这样,每个部分中有多少个数字就无关紧要了。您可能只需要检查是否有空部分。