How to implement biased random function?

python

Solution

The point is to create a new list with more of or less of that certain element you wan't to biase

This ought to do it:

import random

a = ['apple','banana']
probability = [0.1,0.9]

def biase(lst,probability):
    zipped = zip(lst,probability)
    lst = [[i[0]] * int(i[1]*100) for i in zipped]
    new = [b for i in lst for b in i]
    return new

biased_list = biase(a,probability)
random_word = random.choice(biased_list)
print random_word

This code will produce `banana` in most cases because the string `banana` is repeated 90% than `apple`

I've added a list called probability and I've zipped (python lists are ordered) it but a dictionary is more suitable for these sort of tasks

And if you go under the hood and print `biased_list` you'll see something like:

['apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'apple', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana', 'banana']

Problem

My question is about `random.choice` function. As we know, when we run `random.choice(['apple','banana'])`, it will return either `'apple'` or `'banana'` with equal probabilities, what if I want to return biased result, for example, rerurn `'apple'` with 0.9 probability and `'banana'` with 0.1 probability? How to implement this?

Original source