diff options
author | Christian Heimes <christian@cheimes.de> | 2008-03-02 22:46:37 (GMT) |
---|---|---|
committer | Christian Heimes <christian@cheimes.de> | 2008-03-02 22:46:37 (GMT) |
commit | b558a2e13abdbd8ea03691fcf05603c90ef5c091 (patch) | |
tree | 6d92cd3ce4f532794957f28a76f72c1cd41a9b5b /Doc/library/itertools.rst | |
parent | b0bf4b782ffaa3fd332a855cd12c0441832510d4 (diff) | |
download | cpython-b558a2e13abdbd8ea03691fcf05603c90ef5c091.zip cpython-b558a2e13abdbd8ea03691fcf05603c90ef5c091.tar.gz cpython-b558a2e13abdbd8ea03691fcf05603c90ef5c091.tar.bz2 |
Merged revisions 61143-61144,61146-61147,61150-61151,61157,61165-61168,61170-61173,61176-61177,61183 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r61143 | barry.warsaw | 2008-03-01 03:23:38 +0100 (Sat, 01 Mar 2008) | 2 lines
Bump to version 2.6a1
........
r61144 | barry.warsaw | 2008-03-01 03:26:42 +0100 (Sat, 01 Mar 2008) | 1 line
bump idle version number
........
r61146 | fred.drake | 2008-03-01 03:45:07 +0100 (Sat, 01 Mar 2008) | 2 lines
fix typo
........
r61147 | barry.warsaw | 2008-03-01 03:53:36 +0100 (Sat, 01 Mar 2008) | 1 line
Add date to NEWS
........
r61150 | barry.warsaw | 2008-03-01 04:00:52 +0100 (Sat, 01 Mar 2008) | 1 line
Give IDLE a release date
........
r61151 | barry.warsaw | 2008-03-01 04:15:20 +0100 (Sat, 01 Mar 2008) | 1 line
More copyright year and version number bumps
........
r61157 | barry.warsaw | 2008-03-01 18:11:41 +0100 (Sat, 01 Mar 2008) | 2 lines
Set things up for 2.6a2.
........
r61165 | georg.brandl | 2008-03-02 07:28:16 +0100 (Sun, 02 Mar 2008) | 2 lines
It's 2.6 now.
........
r61166 | georg.brandl | 2008-03-02 07:32:32 +0100 (Sun, 02 Mar 2008) | 2 lines
Update year.
........
r61167 | georg.brandl | 2008-03-02 07:44:08 +0100 (Sun, 02 Mar 2008) | 2 lines
Make patchlevel print out the release if called as a script.
........
r61168 | georg.brandl | 2008-03-02 07:45:40 +0100 (Sun, 02 Mar 2008) | 2 lines
New default basename for HTML help files.
........
r61170 | raymond.hettinger | 2008-03-02 11:59:31 +0100 (Sun, 02 Mar 2008) | 1 line
Finish-up docs for combinations() and permutations() in itertools.
........
r61171 | raymond.hettinger | 2008-03-02 12:17:51 +0100 (Sun, 02 Mar 2008) | 1 line
Tighten example code.
........
r61172 | raymond.hettinger | 2008-03-02 12:57:16 +0100 (Sun, 02 Mar 2008) | 1 line
Simplify code for itertools.product().
........
r61173 | raymond.hettinger | 2008-03-02 13:02:19 +0100 (Sun, 02 Mar 2008) | 1 line
Handle 0-tuples which can be singletons.
........
r61176 | georg.brandl | 2008-03-02 14:41:39 +0100 (Sun, 02 Mar 2008) | 2 lines
Make clear that the constants are strings.
........
r61177 | georg.brandl | 2008-03-02 15:15:04 +0100 (Sun, 02 Mar 2008) | 2 lines
Fix factual error.
........
r61183 | gregory.p.smith | 2008-03-02 21:00:53 +0100 (Sun, 02 Mar 2008) | 4 lines
Modify import of test_support so that the code can also be used with a
stand alone distribution of bsddb that includes its own small copy of
test_support for the needed functionality on older pythons.
........
Diffstat (limited to 'Doc/library/itertools.rst')
-rw-r--r-- | Doc/library/itertools.rst | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst index 098972d..9da51aa 100644 --- a/Doc/library/itertools.rst +++ b/Doc/library/itertools.rst @@ -102,26 +102,24 @@ loops that truncate the stream. Each result tuple is ordered to match the input order. So, every combination is a subsequence of the input *iterable*. - Example: ``combinations(range(4), 3) --> (0,1,2), (0,1,3), (0,2,3), (1,2,3)`` - Equivalent to:: def combinations(iterable, r): + 'combinations(range(4), 3) --> (0,1,2) (0,1,3) (0,2,3) (1,2,3)' pool = tuple(iterable) n = len(pool) - assert 0 <= r <= n - vec = range(r) - yield tuple(pool[i] for i in vec) + indices = range(r) + yield tuple(pool[i] for i in indices) while 1: for i in reversed(range(r)): - if vec[i] != i + n - r: + if indices[i] != i + n - r: break else: return - vec[i] += 1 + indices[i] += 1 for j in range(i+1, r): - vec[j] = vec[j-1] + 1 - yield tuple(pool[i] for i in vec) + indices[j] = indices[j-1] + 1 + yield tuple(pool[i] for i in indices) .. versionadded:: 2.6 @@ -356,7 +354,29 @@ loops that truncate the stream. value. So if the input elements are unique, there will be no repeat values in each permutation. - Example: ``permutations(range(3),2) --> (1,2) (1,3) (2,1) (2,3) (3,1) (3,2)`` + Equivalent to:: + + def permutations(iterable, r=None): + 'permutations(range(3), 2) --> (0,1) (0,2) (1,0) (1,2) (2,0) (2,1)' + pool = tuple(iterable) + n = len(pool) + r = n if r is None else r + indices = range(n) + cycles = range(n-r+1, n+1)[::-1] + yield tuple(pool[i] for i in indices[:r]) + while n: + for i in reversed(range(r)): + cycles[i] -= 1 + if cycles[i] == 0: + indices[i:] = indices[i+1:] + indices[i:i+1] + cycles[i] = n - i + else: + j = cycles[i] + indices[i], indices[-j] = indices[-j], indices[i] + yield tuple(pool[i] for i in indices[:r]) + break + else: + return .. versionadded:: 2.6 |