idpd15
idpd15

Reputation: 456

Select numbers from a list with given probability p

Lets say I have a list of numbers [1, 2, 3, ..., 100]. Now I want to select numbers from the list where each number is either accepted or rejected with a given probability 0 < p < 1 . The accepted numbers are then stored in a separate list. How can I do that?
The main problem is choosing the number with probability p. Is there an inbuilt function for that?
The value of p is given by the user.

Upvotes: 2

Views: 565

Answers (1)

Patrick Artner
Patrick Artner

Reputation: 51633

You can use random.random() and a list comprehension:

import random

l = [1,2,3,4,5,6,7,8,9]

k = [x for x in l if random.random() > 0.23] # supply user input value here as 0.23

print(l)
print(k)

Output:

[1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 3, 4, 5, 6, 7]

to check each element of the list if it has a probability of > 0.23 of staying in the list.


Sidenote:

random.choices() has the ability to accept weights:

random.choices(population, weights=None, *, cum_weights=None, k=1)

but those only change the probability inside the given list for drawing one of the elements (absolute or relative weights are possible) - thats not working for "independent" probabilities though.

Upvotes: 1

Related Questions