simple question re list iteration semantics

Dave Angel davea at ieee.org
Wed Apr 22 04:16:05 CEST 2009


Esmail wrote:
> <div class="moz-text-flowed" style="font-family: -moz-fixed">Hello all,
>
> I have a simple question regarding semantics.
>
> Given a list 'li', I can always do this to iterate through all items in
> order:
>
> for i in range(0, len(li)):
>     print li[i]
>
> Will this always be equivalent to
>
>
> for i in li:
>     print i
>
> I assume it is, and the order will always be the same, or am I mistaken?
>
> Would the 2nd one be considered more Pythonic? (It looks both
> clearer and cleaner to me).
>
> Thanks.
>
> Esmail
>
>
> </div>
>
The second one will be equivalent if li is really a list.  With a few 
differences, such as:
    1) it's faster
    2) it doesn't create an extra temporary list (although on python 
3.0, neither will the first one)
    3) the subsequent value of i is the last element of the list, rather 
than the last index in the list
    4) it'll work even if li is later changed to a generator
    5) it'll do something useful even if the li is changed to a 
dictionary or a set, although order isn't guaranteed there
    6) it'll behave differently if the list is changed during the loop

The second one is definitely more pythonic.




More information about the Python-list mailing list