diff options
author | Raymond Hettinger <python@rcn.com> | 2008-07-19 00:43:00 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2008-07-19 00:43:00 (GMT) |
commit | 3369167089cb2390b16ced87a0c54a3678342e83 (patch) | |
tree | fa1f8dec0ec490803e5a4f4c5020871ca25c6f51 /Doc/library/itertools.rst | |
parent | 3c212163ec5fadeabf4070c2b2e22bd85e2d2aa0 (diff) | |
download | cpython-3369167089cb2390b16ced87a0c54a3678342e83.zip cpython-3369167089cb2390b16ced87a0c54a3678342e83.tar.gz cpython-3369167089cb2390b16ced87a0c54a3678342e83.tar.bz2 |
Add recipe to the itertools docs.
Diffstat (limited to 'Doc/library/itertools.rst')
-rw-r--r-- | Doc/library/itertools.rst | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst index 81b2c7f..9a3626f 100644 --- a/Doc/library/itertools.rst +++ b/Doc/library/itertools.rst @@ -701,3 +701,18 @@ which incur interpreter overhead. for d, s in izip(data, selectors): if s: yield d + + def combinations_with_replacement(iterable, r): + "combinations_with_replacement('ABC', 3) --> AA AB AC BB BC CC" + pool = tuple(iterable) + n = len(pool) + indices = [0] * r + yield tuple(pool[i] for i in indices) + while 1: + for i in reversed(range(r)): + if indices[i] != n - 1: + break + else: + return + indices[i:] = [indices[i] + 1] * (r - i) + yield tuple(pool[i] for i in indices) |