2017-02-23 7 views
1

Ich schreibe eine Funktion, die eine Liste von Textelementen durchläuft - jedes Element analysiert und die analysierten Elemente wieder an eine Liste anfügt. Der Code ist als unten:Listenindex außerhalb des Bereichs - Indexfehler Python

clean_list = [] 

def to_words(list): 
    i = 0 
    while i <= len(list): 
     doc = list[i] 
     # 1. Remove HTML 
     doc_text = BeautifulSoup(doc).get_text() 
     # 2. Remove non-letters (not sure if this is advisable for all documents)  
     letters_only = re.sub("[^a-zA-Z]", " ", doc_text) 
     # 3. Convert to lower case, split into individual words 
     words = letters_only.lower().split()            
     # 4. Remove stop words 
     stops = set(stopwords.words("english")) 
     meaningful_words = [w for w in words if not w in stops] 
     # 5. Join the words back into one string separated by space, and return the result. 
     clean_doc = (" ".join(meaningful_words)) 
     i = i+1 
     clean_list.append(clean_doc) 

Aber wenn ich die Liste in dieser Funktion übergeben, to_words(list), bekomme ich diesen Fehler: IndexError: list index out of range

ich experimentieren versuchte ohne technisch Definition der to_words Funktion dh die Schleife zu vermeiden, Manuelles Ändern von i als 0,1,2 usw. und Folgen der Schritte der Funktion; das funktioniert gut.

Warum sehe ich diesen Fehler, wenn ich die Funktion (und Schleife) verwende?

+0

Können Sie hier vollständige Rückverfolgung geben? –

+2

Eine Liste der Länge 5 hat Indizes '0, 1, 2, 3, 4'. - Ihr 'while i <= len (list)' gibt 'i' die Werte' 0, 1, 2, 3, 4, 5'. Ändern Sie es in 'while i asongtoruin

+1

Verwenden Sie auch nicht den Variablennamen 'list', da dies zu Verwechslungen mit dem Objekttyp' list' führt. – asongtoruin

Antwort

1

ändern while i <= len(list)-while i < len(list)

Liste Indizierung Start von 0 so, i <= len(list) den Index als gleich len(list) erfüllen, so wird das ist ein Indexfehler machen.

1. Verwenden Sie besser für, anstatt Dateischleife zu verwenden, Listenunterstützung durch die list Iterieren. Wie

for elem in list_: 
    # Do your operation here 

2. Verwenden Sie nicht list als Variablenname.

Verwandte Themen