On Sat, Aug 17, 2019 at 09:02:54AM +0200, Patryk Gałczyński wrote: > Hi! > > Recently I encountered a situation when I needed to pick a random > population sample but with specific distribution function - paretovariate in > this particular case.
Let me see if I understand... you have a paretovariate distribution, and you want to generate a sample of values from that distribution? Or another way of putting it, you want to generate random numbers from that distribution? Use the random.paretovariate() function (which I see you know about). There's no need for random.choice or other methods to be involved. That might not be what you *want*, but that is what you seem to be describing. > After poking around in the random module I found out > that none of the so-called "sequence methods" methods support custom random > function except for random.shuffle > I would like to propose a new optional keyword argument for all these sequence > methods (choice, sample, choices) that will - similarly to how shuffle does > - take a zero-argument random distribution function of the users choice. > Because it should be a zero-argument function, it would most likely require > to pass "configured" distribution function with lambda. I would see it > being used like this: > > ```python > import random > random.choice([1, 2, 3], random=lambda: random.paretovariate(1.75)) > ``` The docs for shuffle say that: The optional argument random is a 0-argument function returning a random float in [0.0, 1.0); by default, this is the function random(). but random.paretovariate returns a float between [1.0, ∞). By definition, every value it produces is out of range, and there's no way of compressing it to [0, 1) without changing the shape. I think you need to consider more strongly what you are actually trying to solve, go back to trying to understand the requirements before writing the program. Because I don't think that "Choose an item from this finite list according to an infinite distribution" is meaningful. -- Steven _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/5SRPE5QGTXJT3VLQFQFF4QXMVWH7DS3G/ Code of Conduct: http://python.org/psf/codeofconduct/