mirror of
https://github.com/python/cpython.git
synced 2025-10-03 13:45:29 +00:00
Move random selection recipes from itertools.rst to random.rst (GH-98369)
(cherry picked from commit 70732d8a4c
)
Co-authored-by: Raymond Hettinger <rhettinger@users.noreply.github.com>
This commit is contained in:
parent
6c7f7ec819
commit
9cb30bb339
2 changed files with 31 additions and 25 deletions
|
@ -1000,31 +1000,6 @@ which incur interpreter overhead.
|
||||||
# first_true([a,b], x, f) --> a if f(a) else b if f(b) else x
|
# first_true([a,b], x, f) --> a if f(a) else b if f(b) else x
|
||||||
return next(filter(pred, iterable), default)
|
return next(filter(pred, iterable), default)
|
||||||
|
|
||||||
def random_product(*args, repeat=1):
|
|
||||||
"Random selection from itertools.product(*args, **kwds)"
|
|
||||||
pools = [tuple(pool) for pool in args] * repeat
|
|
||||||
return tuple(map(random.choice, pools))
|
|
||||||
|
|
||||||
def random_permutation(iterable, r=None):
|
|
||||||
"Random selection from itertools.permutations(iterable, r)"
|
|
||||||
pool = tuple(iterable)
|
|
||||||
r = len(pool) if r is None else r
|
|
||||||
return tuple(random.sample(pool, r))
|
|
||||||
|
|
||||||
def random_combination(iterable, r):
|
|
||||||
"Random selection from itertools.combinations(iterable, r)"
|
|
||||||
pool = tuple(iterable)
|
|
||||||
n = len(pool)
|
|
||||||
indices = sorted(random.sample(range(n), r))
|
|
||||||
return tuple(pool[i] for i in indices)
|
|
||||||
|
|
||||||
def random_combination_with_replacement(iterable, r):
|
|
||||||
"Random selection from itertools.combinations_with_replacement(iterable, r)"
|
|
||||||
pool = tuple(iterable)
|
|
||||||
n = len(pool)
|
|
||||||
indices = sorted(random.choices(range(n), k=r))
|
|
||||||
return tuple(pool[i] for i in indices)
|
|
||||||
|
|
||||||
def nth_combination(iterable, r, index):
|
def nth_combination(iterable, r, index):
|
||||||
"Equivalent to list(combinations(iterable, r))[index]"
|
"Equivalent to list(combinations(iterable, r))[index]"
|
||||||
pool = tuple(iterable)
|
pool = tuple(iterable)
|
||||||
|
|
|
@ -564,6 +564,37 @@ Simulation of arrival times and service deliveries for a multiserver queue::
|
||||||
Recipes
|
Recipes
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
These recipes show how to efficiently make random selections
|
||||||
|
from the combinatoric iterators in the :mod:`itertools` module:
|
||||||
|
|
||||||
|
.. testcode::
|
||||||
|
import random
|
||||||
|
|
||||||
|
def random_product(*args, repeat=1):
|
||||||
|
"Random selection from itertools.product(*args, **kwds)"
|
||||||
|
pools = [tuple(pool) for pool in args] * repeat
|
||||||
|
return tuple(map(random.choice, pools))
|
||||||
|
|
||||||
|
def random_permutation(iterable, r=None):
|
||||||
|
"Random selection from itertools.permutations(iterable, r)"
|
||||||
|
pool = tuple(iterable)
|
||||||
|
r = len(pool) if r is None else r
|
||||||
|
return tuple(random.sample(pool, r))
|
||||||
|
|
||||||
|
def random_combination(iterable, r):
|
||||||
|
"Random selection from itertools.combinations(iterable, r)"
|
||||||
|
pool = tuple(iterable)
|
||||||
|
n = len(pool)
|
||||||
|
indices = sorted(random.sample(range(n), r))
|
||||||
|
return tuple(pool[i] for i in indices)
|
||||||
|
|
||||||
|
def random_combination_with_replacement(iterable, r):
|
||||||
|
"Random selection from itertools.combinations_with_replacement(iterable, r)"
|
||||||
|
pool = tuple(iterable)
|
||||||
|
n = len(pool)
|
||||||
|
indices = sorted(random.choices(range(n), k=r))
|
||||||
|
return tuple(pool[i] for i in indices)
|
||||||
|
|
||||||
The default :func:`.random` returns multiples of 2⁻⁵³ in the range
|
The default :func:`.random` returns multiples of 2⁻⁵³ in the range
|
||||||
*0.0 ≤ x < 1.0*. All such numbers are evenly spaced and are exactly
|
*0.0 ≤ x < 1.0*. All such numbers are evenly spaced and are exactly
|
||||||
representable as Python floats. However, many other representable
|
representable as Python floats. However, many other representable
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue