64

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 " 
1
  • 1
    Aside from the numbering issue, are you sure this is what you want? w is the current character, not word. Commented Mar 28, 2013 at 14:46

2 Answers 2

112

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 
5
  • so with the enumerate() function, you need to define two variables? one for the index and one for the characters? Commented Mar 28, 2013 at 14:39
  • 2
    @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. Commented Mar 28, 2013 at 14:40
  • 3
    @user1817081: You can also do for elem in enumerate(loopme), then use elem[[0] for the index value and elem[1] for the character, but that is just more cumbersome. Commented Mar 28, 2013 at 14:41
  • Gotcha, so enumerate() is creating a map of the string. I am guessing this will also apply to a List? Commented Mar 28, 2013 at 14:44
  • 3
    @user1817081: enumerate() can be used on any sequence. It doesn't create a map, it simply keeps a counter. Every time the for 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. Commented Mar 28, 2013 at 14:46
5

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.