simple question re list iteration semantics
davea at ieee.org
Wed Apr 22 04:16:05 CEST 2009
> <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
> 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).
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