]> granicus.if.org Git - python/commitdiff
Backport r68942: update powerset() recipe.
authorRaymond Hettinger <python@rcn.com>
Mon, 26 Jan 2009 02:23:50 +0000 (02:23 +0000)
committerRaymond Hettinger <python@rcn.com>
Mon, 26 Jan 2009 02:23:50 +0000 (02:23 +0000)
Doc/library/itertools.rst
Lib/test/test_itertools.py

index db10b6d1ac593e93c62115b0989bbc6163466fe4..36254cd8f8d38bcfe99133be7385dfeca9ad9813 100644 (file)
@@ -590,11 +590,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 compress(data, selectors):
        "compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F"
index ba55d23e95cf33245be4eca94d22ca5f7a1012d8..7023b293bf047a003825fb45f9883304ea36f0e1 100644 (file)
@@ -1277,11 +1277,9 @@ Samuele
 ...             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 range(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 compress(data, selectors):
 ...     "compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F"
@@ -1379,8 +1377,8 @@ perform as purported.
 >>> list(roundrobin('abc', 'd', 'ef'))
 ['a', 'd', 'e', 'b', 'f', 'c']
 
->>> list(map(sorted, powerset('ab')))
-[[], ['a'], ['b'], ['a', 'b']]
+>>> list(powerset([1,2,3]))
+[(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]
 
 >>> list(compress('abcdef', [1,0,1,0,1,1]))
 ['a', 'c', 'e', 'f']