<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Apr 23, 2012, at 9:52 AM, Steven D'Aprano wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">However, the discoverability of this solution is essentially zero<span class="Apple-converted-space"> </span></span></blockquote></div><br><div>That exact code has been in the documentation for years:</div><div><br></div><div><pre style="overflow-x: auto; overflow-y: hidden; padding: 5px; background-color: rgb(238, 255, 204); color: rgb(51, 51, 51); line-height: 15px; border-top-width: 1px; border-bottom-width: 1px; border-top-style: solid; border-bottom-style: solid; border-top-color: rgb(170, 204, 153); border-bottom-color: rgb(170, 204, 153); border-left-style: none; border-right-style: none; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><span class="k" style="color: rgb(0, 112, 32); font-weight: bold; ">def</span> <span class="nf" style="color: rgb(6, 40, 126); ">powerset</span><span class="p">(</span><span class="n">iterable</span><span class="p">):</span>
    <span class="s" style="color: rgb(64, 112, 160); ">"powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"</span>
    <span class="n">s</span> <span class="o" style="color: rgb(102, 102, 102); ">=</span> <span class="nb" style="color: rgb(0, 112, 32); ">list</span><span class="p">(</span><span class="n">iterable</span><span class="p">)</span>
    <span class="k" style="color: rgb(0, 112, 32); font-weight: bold; ">return</span> <span class="n">chain</span><span class="o" style="color: rgb(102, 102, 102); ">.</span><span class="n">from_iterable</span><span class="p">(</span><span class="n">combinations</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">r</span><span class="p">)</span> <span class="k" style="color: rgb(0, 112, 32); font-weight: bold; ">for</span> <span class="n">r</span> <span class="ow" style="color: rgb(0, 112, 32); font-weight: bold; ">in</span> <span class="nb" style="color: rgb(0, 112, 32); ">range</span><span class="p">(</span><span class="nb" style="color: rgb(0, 112, 32); ">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span><span class="o" style="color: rgb(102, 102, 102); ">+</span><span class="mi" style="color: rgb(32, 128, 80); ">1</span><span class="p">))</span></pre><div><br></div></div><div>The whole purpose of the itertools recipes are to teach how</div><div>the itertools can be readily combined to build new tools.</div><div><br></div><div><a href="http://docs.python.org/library/itertools.html#module-itertools">http://docs.python.org/library/itertools.html#module-itertools</a></div><div><br></div><div><br></div><div>Raymond</div></body></html>