Problem with a for loop and a list

Peter Otten __peter__ at web.de
Wed Jul 2 04:36:03 EDT 2008


Alexnb wrote:

> 
> I am not sure what is going on here. Here is the code that is being run:
> 
> def getWords(self):
>         self.n=0

The value of self.n only makes sense within the method, so you better use
the local variable n instead of the instance attribute self.n

>         for entry in self.listBuffer:
>             self.wordList[self.n] = entry.get()
>         self.n=self.n+1
>     
>         print self.wordList
> 
> This is the "listBuffer" that you see:
> 
> self.listBuffer=[self.e1, self.e2, self.e3, self.e4,
>                          self.e5, self.e6, self.e7, self.e8,
>                          self.e9, self.e10, self.e11,
>                          self.e12, self.e13, self.e14]
> 
> (side note, those are all tkinter entry widgets, and the get() function
> gets the text)
> 
> this is the error the interpreter is giving me when I run it:
> 
> self.getWords()
>   File "C:/Documents and Settings/Alex/My
>   Documents/PYTHON/DictionaryApp/The
> GUI.py", line 153, in getWords
>     self.wordList[self.n] = entry.get()
> IndexError: list assignment index out of range
> 
> I have no idea what "list assignment index out of range means?!?!

As Albert explained this means that wordList is shorter than listBuffer. The
most flexible remedy is to have wordList grow dynamically:

def getWords(self):
    wordList = []
    for entry in self.listBuffer:
        wordList.append(entry.get())
    print wordList

If for some reason you want to remember the values in wordList add

    self.wordList = wordList 

to the method (this is the same consideration as for self.n versus n).

Peter




More information about the Python-list mailing list