diff options
author | Raymond Hettinger <python@rcn.com> | 2009-01-25 21:31:47 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2009-01-25 21:31:47 (GMT) |
commit | 68d919e4d60b49d7252bf3a3a53299bbad86fe68 (patch) | |
tree | a61b4366e8d0837e2594bd7cd9f3ef9cd5184650 /Doc | |
parent | 2bcb8e9b0d19bf60b38553dcb1d9a6c4cb86a8a1 (diff) | |
download | cpython-68d919e4d60b49d7252bf3a3a53299bbad86fe68.zip cpython-68d919e4d60b49d7252bf3a3a53299bbad86fe68.tar.gz cpython-68d919e4d60b49d7252bf3a3a53299bbad86fe68.tar.bz2 |
Improved itertools recipe for generating powerset().
Diffstat (limited to 'Doc')
-rw-r--r-- | Doc/library/itertools.rst | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst index 903284e..b7cd431 100644 --- a/Doc/library/itertools.rst +++ b/Doc/library/itertools.rst @@ -687,11 +687,9 @@ which incur interpreter overhead. nexts = cycle(islice(nexts, pending)) def powerset(iterable): - "powerset('ab') --> set([]), set(['a']), set(['b']), set(['a', 'b'])" - # Recipe credited to Eric Raymond - pairs = [(2**i, x) for i, x in enumerate(iterable)] - for n in xrange(2**len(pairs)): - yield set(x for m, x in pairs if m&n) + "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)" + s = list(iterable) + return chain.from_iterable(combinations(s, r) for r in range(len(s)+1)) def combinations_with_replacement(iterable, r): "combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CC" |