Python For loop get index
120,809
Solution 1
Use the enumerate()
function to generate the index along with the elements of the sequence you are looping over:
for index, w in enumerate(loopme):
print "CURRENT WORD IS", w, "AT CHARACTER", index
Solution 2
Do you want to iterate over characters or words?
For words, you'll have to split the words first, such as
for index, word in enumerate(loopme.split(" ")):
print "CURRENT WORD IS", word, "AT INDEX", index
This prints the index of the word.
For the absolute character position you'd need something like
chars = 0
for index, word in enumerate(loopme.split(" ")):
print "CURRENT WORD IS", word, "AT INDEX", index, "AND AT CHARACTER", chars
chars += len(word) + 1
Author by
user1817081
Updated on March 29, 2020Comments
-
user1817081 about 4 years
I am writing a simple Python for loop to prnt the current character in a string. However, I could not get the index of the character. Here is what I have, does anyone know a good way to get the current index of the character in the loop?
loopme = 'THIS IS A VERY LONG STRING WITH MANY MANY WORDS!' for w in loopme: print "CURRENT WORD IS " + w + " AT CHARACTER "
-
Peter.Ladanyi about 11 yearsAside from the numbering issue, are you sure this is what you want?
w
is the current character, not word.
-
-
user1817081 about 11 yearsso with the enumerate() function, you need to define two variables? one for the index and one for the characters?
-
Martijn Pieters about 11 years@user1817081: You don't have to; you are now looping over something that yields two-value tuples. Using tuple unpacking just makes it easier to 'receive' them.
-
Martijn Pieters about 11 years@user1817081: You can also do
for elem in enumerate(loopme)
, then useelem[[0]
for the index value andelem[1]
for the character, but that is just more cumbersome. -
user1817081 about 11 yearsGotcha, so enumerate() is creating a map of the string. I am guessing this will also apply to a List?
-
Martijn Pieters about 11 years@user1817081:
enumerate()
can be used on any sequence. It doesn't create a map, it simply keeps a counter. Every time thefor
construct asks for the next element, it in turn asks the wrapped sequence for the next item, then returns the value of the counter together with that next value from the wrapped sequence, then increments the internal counter.