Python: IndexError: Listenindex außerhalb des Bereichs Fehler

Aktualisiert, siehe unten!

Ich stecke fest! Ich bekomme einen IndexError: Listenindex außerhalb des Bereichs Fehler.

def makeInverseIndex(strlist): numStrList = list(enumerate(strlist)) n = 0 m = 0 dictionary = {} while (n < len(strList)-1): while (m < len(strlist)-1): if numStrList[n][1].split()[m] not in dictionary: dictionary[numStrList[n][1].split()[m]] = {numStrList[n][0]} m = m+1 elif {numStrList[n][0]} not in dictionary[numStrList[n][1].split()[m]]: dictionary[numStrList[n][1].split()[m]]|{numStrList[n][0]} m = m+1 n = n+1 return dictionary 

Es gibt mir diesen Fehler

 >>> makeInverseIndex(s) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "./inverse_index_lab.py", line 23, in makeInverseIndex if numStrList[n][1].split()[m] not in dictionary: IndexError: list index out of range 

Ich verstehe es nicht … was verursacht das? Es passiert auch wenn ich die Bedingungen der while-Schleife ändere. Ich verstehe nicht, was das Problem ist. Ich bin ziemlich neu hier, also erklären Sie es wie Sie, wenn ein Stück Brokkoli Sie diese Frage gestellt hat.

Bearbeiten:

Danke Jungs, ich habe vergessen, Beispiele von Input zu erwähnen, ich möchte so etwas wie folgt eingeben:

  L=['AB C', 'BC E', 'A E', 'CD A'] 

Und bekomme diese als Ausgabe:

 D={'A':{0,2,3}, 'B':{0,1}, 'C':{0,3}, 'D':{3}, 'E':{1,2}} 

So erstellen Sie ein Wörterbuch, das zeigt, wo in der Liste finden Sie vielleicht ein 'A' zum Beispiel. Es sollte mit einer riesigen Liste arbeiten. Hat jemand irgendwelche Tipps? Ich möchte es iterieren und jeden Brief auswählen und ihnen dann einen Wörterbuchwert zuordnen.

Bearbeiten Sie die Nummer zwei:

Dank großartiger Hilfe von euch hört mein Code so schön aus:

 def makeInverseIndex(strList): numStrList = list(enumerate(strList)) n = 0 dictionary = {} while (n < len(strList)): for word in numStrList[n][1].split(): if word not in dictionary: dictionary[word] = {numStrList[n][0]} elif {numStrList[n][0]} not in dictionary[word]: dictionary[word]|={numStrList[n][0]} n = n+1 return dictionary 

Aber ich schaffe es immer noch, diesen Fehler zu bekommen, wenn ich versuche, das Modul auszuführen:

  >>> makeInverseIndex(L) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "./inverse_index_lab.py", line 21, in makeInverseIndex for word in numStrList[n][1].split(): NameError: global name 'StrList' is not defined 

Ich verstehe nicht, woher der Fehler kommen kann.

2 Solutions collect form web for “Python: IndexError: Listenindex außerhalb des Bereichs Fehler”

Gut zu sehen, einige smart veggies Programmierung.

Zuerst Ihre Frage. Wie @Vasiliy sagte, Sie haben 3 Indizes. Das n ist in Ordnung, da man es mit deinem Zustand schützt. Die 1 ist in Ordnung, da enumerate immer 2 Dinge erzeugt. Das verlässt m . Das ist Dein Problem.

Nehmen wir an, Sie haben N Elemente in strlist . Für jedes Element e in strlist , wenden Sie split() an es. Die Anzahl der Elemente in e.split() ist nicht immer gleich N Die while-Bedingung für m guards gegen N , nicht gegen len(e.split()) , also der Index außerhalb des Bereichs.

Um dies zu lösen, spalte die Schnur zuerst, und dann durchschleife es. Während du dabei bist, könntest du auch gern loszuwerden, die Saite nur einmal zu spalten und eine gewisse Leistung zu erzielen. Außerdem kannst du dein m nicht zurücksetzen, das einfach wächst und wächst.

 while (n < len(strList)): for word in numStrList[n][1].split(): if word not in dictionary: dictionary[word] = {numStrList[n][0]} elif {numStrList[n][0]} not in dictionary[word]: dictionary[word]|={numStrList[n][0]} n = n+1 

Zweitens sind Ihre Bedingungen sehr restriktiv. n < len(strlist) ist gut

Ich habe nicht genug Reputation, um einen Kommentar zu deinem Post zu hinterlassen, also schreibe ich hier eine Antwort:

Ich habe Kopie und fügte den neuesten Code am unteren Rand (bearbeiten 2) und es läuft wie erwartet, so gibt es zwei potenzielle Probleme, die ich sehen kann:

1) Du hättest vielleicht vergessen, deine Funktionsdefinition einzutragen. 2) Du hättest in deiner Funktionsdefinition die Striste gestrafft und Ströme an anderer Stelle deklariert.

Hoffe das hilft.

  • Split pandas dataframe von String
  • Sqlite3 ist nicht in der Lage, in Python 3 zu importieren
  • Matplotlib Folge von Figuren im selben Fenster
  • Bilder verzerrt mit pygame
  • Json.loads () gibt Ausnahme, dass es einen Wert erwartet, sieht aus wie Wert ist da
  • Statische Variable in Python?
  • Wie bekomme ich den Namen / die Datei des Skripts von sitecustomize.py?
  • ValueError: Form der übergebenen Werte ist (3, 27), Indizes implizieren (4, 27) # pandas DataFrame
  • Erstellen von Proxy, Senden von Nachrichten über Proxy-Anwendung
  • Pygame TypeError: fehlt 1 erforderliches Positionsargument:
  • Schwierigkeiten beim Ausführen meiner Klasse Crawler
  • Python ist die beste Programmiersprache der Welt.