enumerate improvement proposal
James Stroud
jstroud at mbi.ucla.edu
Sun Oct 29 06:41:36 EST 2006
James Stroud wrote:
> I think that it would be handy for enumerate to behave as such:
>
> def enumerate(itrbl, start=0, step=1):
> i = start
> for it in itrbl:
> yield (i, it)
> i += step
>
> This allows much more flexibility than in the current enumerate,
> tightens up code in many cases, and seems that it would break no
> existing code. Yes, I have needed this behavior with enumerate, like
> tonight and the current example. I put the "step" parameter in for
> conceptual symmetry with slicing.
>
> Here is a case use (or is it use case?):
>
>
> # with the proposed enumerate
> import operator
> def in_interval(test, bounds, first=1, reverse=False):
> op = operator.gt if reverse else operator.lt # python 2.5
> bounds = sorted(bounds, reverse=reverse)
> for i, bound in enumerate(bounds, first):
> if op(test, bound):
> return i
> return i + 1
>
>
> # with the existing enumerate
> import operator
> def in_interval(test, bounds, first=1, reverse=False):
> op = operator.gt if reverse else operator.lt # python 2.5
> bounds = sorted(bounds, reverse=reverse)
> for i, bound in enumerate(bounds):
> if op(test, bound):
> return i + first
> return i + first + 1
>
>
> py> # eg
> ...
> py> in_interval(8, bounds)
> 2
> py> in_interval(1, bounds)
> 1
> py> in_interval(1, bounds, reverse=True)
> 5
> py> in_interval(8, bounds, reverse=True)
> 4
> py> in_interval(20, bounds, reverse=True)
> 2
>
> Of course, I haven't used step here. Even in this trivial example the
> proposed enumerate cleans the code and logic, eliminating a couple of
> plus signs. For this real-world example, the practical requirement for
> reversing the bins obfuscates somewhat the de-obfuscation provided by
> the proposed enumerate. But I think that it might be obvious that the
> proposed enumerate could help significantly in cases a bit more
> complicated than this one.
>
> Any thoughts?
>
> James
After a brief reflection, I realized that I just described a
"for-to-step-do" style loop one might find in many other languages, most
notably BASIC.
James
More information about the Python-list
mailing list