I would like to select one element from a list using python following the normal distribution. I have a list, e.g.,
alist = ['an', 'am', 'apple', 'cool', 'why']
For example, according to the probability density function (PDF) of normal distribution, the 3rd element in the given list should have the largest probability to be chosen.Any suggestions?
from random import normalvariate
def normal_choice(lst, mean=None, stddev=None):
if mean is None:
# if mean is not specified, use center of list
mean = (len(lst) - 1) / 2
if stddev is None:
# if stddev is not specified, let list be -3 .. +3 standard deviations
stddev = len(lst) / 6
while True:
index = int(normalvariate(mean, stddev) + 0.5)
if 0 <= index < len(lst):
return lst[index]
then
alist = ['an', 'am', 'apple', 'cool', 'why']
for _ in range(20):
print(normal_choice(alist))
gives
why
an
cool
cool
cool
apple
cool
apple
am
am
apple
apple
apple
why
cool
cool
cool
am
am
apple