I write a lot of code that looks like this:
for myElement, elementIndex in zip( elementList,
range(len(elementList))):
print "myElement ", myElement, " at index: ",elementIndex
My question is, is there a better, cleaner, or easier way to get at the
element in a list AND the index of a loop than this?
TIA,
Andrew 8 1464 an*********@gmail.com wrote: I write a lot of code that looks like this:
for myElement, elementIndex in zip( elementList, range(len(elementList))): print "myElement ", myElement, " at index: ",elementIndex
My question is, is there a better, cleaner, or easier way to get at the element in a list AND the index of a loop than this?
for elementIndex, myElement in enumerate(elementList):
print "myElement ", myElement, " at index: ",elementIndex
--Scott David Daniels sc***********@acm.org an*********@gmail.com wrote: I write a lot of code that looks like this:
for myElement, elementIndex in zip( elementList, range(len(elementList))): print "myElement ", myElement, " at index: ",elementIndex
My question is, is there a better, cleaner, or easier way to get at the element in a list AND the index of a loop than this?
TIA, Andrew
enumerate(iterable)
Return an enumerate object. iterable must be a sequence, an iterator, or some
other object which supports iteration. The next() method of the iterator
returned by enumerate() returns a tuple containing a count (from zero) and the
corresponding value obtained from iterating over iterable. enumerate() is useful
for obtaining an indexed series: (0, seq[0]), (1, seq[1]), (2, seq[2]), .... New
in version 2.3
Michael
In article <11********************@j33g2000cwa.googlegroups.c om>, an*********@gmail.com wrote: I write a lot of code that looks like this:
for myElement, elementIndex in zip( elementList, range(len(elementList))): print "myElement ", myElement, " at index: ",elementIndex
My question is, is there a better, cleaner, or easier way to get at the element in a list AND the index of a loop than this?
TIA, Andrew
The real question is *why* do you want the index?
If you're trying to iterate through list indicies, you're probably trying
to write C, C++, Fortran, Java, etc in Python.
Can you describe exactly what it is that you're trying to do?
On 9 Mar 2006 16:32:24 -0800 an*********@gmail.com wrote: I write a lot of code that looks like this:
for myElement, elementIndex in zip( elementList, range(len(elementList))): print "myElement ", myElement, " at index: ",elementIndex
My question is, is there a better, cleaner, or easier way to get at the element in a list AND the index of a loop than this?
In fact it is so common a need, there is a built-in
function called "enumerate" that does the 'zip' for
you:
for elementIndex, myElement in enumerate(elementList):
print "myElement ", myElement, " at index: ",elementIndex
--
Terry Hancock (ha*****@AnansiSpaceworks.com)
Anansi Spaceworks http://www.AnansiSpaceworks.com
On Thu, 09 Mar 2006 20:22:34 -0500, Roy Smith wrote: My question is, is there a better, cleaner, or easier way to get at the element in a list AND the index of a loop than this?
TIA, Andrew
The real question is *why* do you want the index?
If you're trying to iterate through list indicies, you're probably trying to write C, C++, Fortran, Java, etc in Python.
That's a bit harsh, surely? Well-meaning, but still harsh, and untrue.
Wanting to walk through a list replacing or modifying some or all items in
place is not unpythonic. Sure, you could simply create a new list:
L = [1, 2, 3, 4]
newL = []
for item in L:
if item % 3 == 0:
newL.append(item)
else:
newL.append(item**2)
but that's wasteful if the list is big, or if the items are expensive to
copy.
Isn't this more elegant, and Pythonic?
L = [1, 2, 3, 4]
for index, item in enumerate(L):
if item % 3 != 0:
L[index] = item**2
--
Steven.
Sometimes C++ is the right tool/style for the job, but I don't need the
speed or efficiency of C++.
Roy Smith wrote: In article <11********************@j33g2000cwa.googlegroups.c om>, an*********@gmail.com wrote:
I write a lot of code that looks like this:
for myElement, elementIndex in zip( elementList, range(len(elementList))): print "myElement ", myElement, " at index: ",elementIndex
My question is, is there a better, cleaner, or easier way to get at the element in a list AND the index of a loop than this?
TIA, Andrew
The real question is *why* do you want the index?
If you're trying to iterate through list indicies, you're probably trying to write C, C++, Fortran, Java, etc in Python.
Interesting. I just wrote some tools today that parse through a bunch
of logfiles and print out something like: "unmatched memory allocation
in line XXX", or something like that. All of them have a main loop like
this:
for lineNumber, line in enumerate(file("some.log")): ...
I don't think there's anything wrong with that, is there a better way
to do it?
Personally, I don't think "enumerate" would be there if it always
encouraged an "unpythonic" programming style. But then again, I'm not
dutch, so I couldn't tell... ;-)
roy spewed: The real question is *why* do you want the index?
If you're trying to iterate through list indicies, you're probably trying to write C, C++, Fortran, Java, etc in Python.
Could we stop the stupid continual beratement of people validly asking
about enumerate()? Yes, we want to discourage:
for i in xrange(len(seq)):
seq[i]
but in this case, and many other cases, that is clearly not the
question being posed.
enumerate is one of the most useful built-ins and a love the way it
reads in code. Stop the index-hate.
-Mike This discussion thread is closed Replies have been disabled for this discussion. Similar topics
24 posts
views
Thread by wm2004 |
last post: by
|
15 posts
views
Thread by John J |
last post: by
|
1 post
views
Thread by PENGUINS ARE THE BEST BIRDS PENGUINS ARE THE BEST |
last post: by
|
136 posts
views
Thread by Matt Kruse |
last post: by
|
3 posts
views
Thread by Irene |
last post: by
|
4 posts
views
Thread by xenophon |
last post: by
|
4 posts
views
Thread by Military Smurf |
last post: by
|
7 posts
views
Thread by shrini |
last post: by
| |
23 posts
views
Thread by vgnsh2 |
last post: by
| | | | | | | | | | |