I want to generate one random combination out of all possible combinations_with_replacement
. The tricky bit is that I want each of the possible outcomes to have the same probability without needing to generate (not even implicit) all the possible outcomes.
For example:
import itertools
import random
random.choice(list(itertools.combinations_with_replacement(range(4), 2)))
Is too slow because it needs to create all possible combinations whereas I only want one. It's not so bad if I determine how many combinations_with_replacement
there will be and use random.randrange
together with next
and itertools.islice
on the itertools.combinations_with_replacement
. That doesn't need to generate all possible combinations (except in the worst-case). But it's still too slow.
On the other hand the recipe mentioned in the itertools
documentation is fast but not each combination has the same probability.
Aucun commentaire:
Enregistrer un commentaire