[issue17930] Search not needed in combinations_with_replacement
Tim Peters
report at bugs.python.org
Wed May 8 22:48:20 CEST 2013
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 <report at bugs.python.org>
<http://bugs.python.org/issue17930>
_______________________________________
More information about the Python-bugs-list
mailing list