[Python-ideas] More classical for-loop

David Mertz mertz at gnosis.cx
Fri Feb 17 17:31:00 EST 2017


Iterating over range(len(collection)) is one of the worst anti-patterns in
Python. I take great pains to slap my students who do that.

On Feb 17, 2017 9:32 AM, "Mikhail V" <mikhailwas at gmail.com> wrote:

>
> On 17 February 2017 at 17:37, Chris Angelico <rosuav at gmail.com> wrote:
>
>> On Sat, Feb 18, 2017 at 3:30 AM, Mikhail V <mikhailwas at gmail.com> wrote:
>> > On 17 February 2017 at 04:59, Chris Angelico <rosuav at gmail.com> wrote:
>> >>
>> >> On Fri, Feb 17, 2017 at 2:13 PM, Mikhail V <mikhailwas at gmail.com>
>> wrote:
>> >> > Common use case:
>> >> >
>> >> > L = [1,3,5,7]
>> >> >
>> >> > for i over len(L):
>> >> >    e = L[i]
>> >> >
>> >> > or:
>> >> >
>> >> > length = len(L)
>> >> > for i over length:
>> >> >    e = L[i]
>> >>
>> >> Better use case:
>> >>
>> >> for i, e in enumerate(L):
>> >>
>> >
>> > This would be more compact, yet less readable, more error prone variant.
>> > I'd avoid it it all costs and even if I don't need the index further in
>> loop
>> > body,
>> > (which happens rarely in my experience) I write e=L[i] in second line
>> > to make the code more verbose and keep the flow order.
>> > So your variant (and those proposed in PEP-212) could serve in list
>> > comprehensions for example, but for common 'expanded' code  I find it
>> > decline of readability, and creating totally different variants for same
>> > iteration idea.
>> > But partially that could be simply matter of habit and love to
>> contractions.
>>
>> If you don't need the index, why not just iterate over the list directly?
>>
>> for e in L:
>>
>> That's the single most obvious way to step through a collection in
>> Python. What do you need to count up to the length for?
>>
>>
> I have said I need the index, probably you've misread my last comment.
> Further more I explained why I think iteration over index should be the
> preferred way, it help with readability a lot.
> All my learning years ended up with rewriting most code to "for i in
> range()"
> and I slap myself when I start to write "for e in L".
> It is exactly where TOOWTDI applies perfectly and it is integer iteration
> for me.
>
> Mikhail
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20170217/54b97414/attachment.html>


More information about the Python-ideas mailing list