Tim Peters added the comment:

There's another savings to be had when an index becomes the maximum:  in that 
case, all the indices to its right are already at the maximum, so no need to 
overwrite them.  This isn't as big a savings as skipping the search, but still 
buys about 10% more in the Python code.  Like so:

    def cwr3(iterable, r):
        pool = tuple(iterable)
        n = len(pool)
        if n == 0 and r:
            return
        indices = [0] * r
        yield tuple(pool[i] for i in indices)
        rmax, nmax = r-1, n-1
        j = rmax if n > 1 else -1
        while j >= 0:
            newval = indices[j] + 1
            if newval < nmax:
                indices[j:] = [newval] * (r - j)
                j = rmax
            else:
                assert newval == nmax
                indices[j] = newval
                j -= 1
            yield tuple(pool[i] for i in indices)

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue17930>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to