drunk
is a simple module that lets you make simple random operations with
customizable weights. It depends to built-in random
module.
Just install it via pip
. It's compatible with 2.7 and 3.x versions of Python.
pip install drunk
Creates a generator that chooses a random element from bundle
Weight for each element is calculated by the
weight_key
. weight_key
should
provide a positive int
or a positive float
value.
Choses a random element from bundle
.
Weight for each element is calculated by the
weight_key
. weight_key
should
provide a positive int
or a positive float
value.
Creates a shuffled version of the bundle
.
weight_key
calculates the weights.
Assume A
and B
in bundle
.
If A
's weight greater than B
's,
then you'll see A
before B
in the shuffled bundle
,
more frequently (that means weight).
Gives a size
sized sub-bundle of the bundle.
weight_key
calculates the weights.
If weight_key
returns a higher value for an element,
The probability of chosing that element is also higher.
If you don't provide a weight_key
;
drunk.choice
will behave like random.choice
drunk.shuffle
will behave like random.shuffle
static_picker
example:
import drunk
my_pretty_bundle = ['Alpay', 'Gandalf', 'Kenobi', 'Amca']
weight = lambda x: len(x) # Assume that weights are related with the length
picker = static_picker(my_pretty_bundle)
choices = [next(picker) for i in range(10)]
print(choices) # returns a list filled with 10 picks.
choice
example:
Here's a dummy class named ABasicClass
,
a list of some of its instances named my_pretty_bundle
and a weight_key
to calculate weights.
drunk.choice
choses an element according to
the weights which are calculated by
an inline function.
import drunk
class ABasicClass(object):
def __init__(self, name, weight):
self.name = name
self.weight = weight
def __repr__(self):
return str(self.name)
my_pretty_bundle = []
my_pretty_bundle.append(ABasicClass("Amca", 40))
my_pretty_bundle.append(ABasicClass("Alpay", 30))
my_pretty_bundle.append(ABasicClass("Gandalf", 20))
my_pretty_bundle.append(ABasicClass("Kenobi", 10))
choosen_one = drunk.choice(my_pretty_bundle, lambda x: x.weight)
print("You picked ", choosen_one, "!!1!one!")
Shuffle example:
Here's an list named my_pretty_list
.
The weight of an element is its length.
import drunk
my_pretty_list = ["Doctor Who", "Banana", "Meh", "Apple"]
print(drunk.shuffle(my_pretty_list, weight_key=lambda x: len(x)))
Sampling example: Let there be a bundle. We want random 5 elements of it. There is also a f
function that calculates the weight of each element in bundle. Let the weight of an element is itself.
import drunk
my_sexy_bundle = [1, 2, 3, 4]
print(drunk.sample(my_pretty_list, weight_key=lambda x: x))
Or you can get some of that bundle which means a random sized sub-bundle.
import drunk
my_sexy_bundle = [1, 2, 3, 4]
print(drunk.sample(my_pretty_list, weight_key=lambda x: x))