Liste sortieren: index out of range

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von oyster-manu, 25.01.2009.

  1. #1 oyster-manu, 25.01.2009
    Zuletzt bearbeitet: 25.01.2009
    oyster-manu

    oyster-manu toast

    Dabei seit:
    26.06.2003
    Beiträge:
    1.055
    Zustimmungen:
    0
    Hallo,

    ich habe diese kleine Python-Programm geschrieben welches die Usereingaben in eine Liste packt und dann sortiert ausgeben soll.

    Code:
    anz = input("anzahl: ") # wie viele werte eingegeben werden sollen
    
    for i in range(anz): # so viele werte wie anzahl angeben
        x[i] = input("Bitte eine Zahl eingeben ")
    
    x.sort()
    
    for i in range(anz):
        print x[i]
    
    print "programmende"
    
    Jedoch funktioniert das nur wenn ich eine Liste mit weniger als 5 Elementen erstelle. Sobald ich anzahl = 5 setze und den 5. Wert eingebe, bricht das Programm ab:

    Code:
    anzahl: 6
    Bitte eine Zahl eingeben 3
    Bitte eine Zahl eingeben 6
    Bitte eine Zahl eingeben 8
    Bitte eine Zahl eingeben 2
    Bitte eine Zahl eingeben 5
    Traceback (most recent call last):
      File "/home/manu/eingabewerte_sortieren.py", line 7, in <module>
        x[i] = input("Bitte eine Zahl eingeben ")
    IndexError: list assignment index out of range
    >>> 
    
    Woran liegt das?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 daboss, 25.01.2009
    Zuletzt bearbeitet: 25.01.2009
    daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    Normalerweise fängt bei Arrays die Zählung bei 0 an. x[0] ist das erste, x[5] das sechste und letzte Element, x[6] ungültig.
    Sprich, du müsstest
    Code:
    x[i-1] = input("Bitte eine Zahl eingeben ")
    schreiben. Andernfalls belegst du nur x[1]...x[5], und bei x[6] kommt (natürlich) der Fehler.

    (Wobei ich Perl, Ruby, Phyton... nicht kenne, aber spontan fällt mir nur PL/SQL ein, wo x[1] das erste Element wäre... sollte also stimmen, was ich gerade behauptet habe ;) )
     
  4. #3 bytepool, 25.01.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    im Allgemeinen ist es hilfreich wenn du in diesem Forum dazu schreiben wuerdest um welche Programmiersprache es sich handelt. Jeder der Python kennt sieht das natuerlich sofort, netter ist es trotzdem, vor allem fuer Leute die kein Python kennen.

    Du hast in deinem Code Auszug die Variable x nicht initialisiert, aber genau der Teil ist der Knackpunkt. Du kannst eine Liste nicht erweitern indem du einer belibiegen Position einen Wert zuweist. Bei Listen muss das natuerlich via list.append() geschehen, die direkte Zuweisung funktioniert nur bei dictionaries.

    Edit: @daboss
    Du hast Recht dass die Indizierung bei 0 beginnt, aber dafuer sorgt bereits die Funktion range().

    mfg,
    bytepool
     
  5. #4 oyster-manu, 25.01.2009
    Zuletzt bearbeitet: 25.01.2009
    oyster-manu

    oyster-manu toast

    Dabei seit:
    26.06.2003
    Beiträge:
    1.055
    Zustimmungen:
    0
    Hatte in der Eile diesen Post zu schreiben ganz vergessen um welche Sprache es sich handelt. T'schuldigung!

    Ich dachte durch "anzahl = input("anzahl: ") " und die erste for-Schleife ist die Länge der Liste so definiert, dass sie genau so lang ist, wie anzahl vorgibt.
    Wenn ich nun eine Liste brauche, dessen Länge ich nicht kenne (sie wird ja vom Benutzer festgelegt), reicht es dann die Liste mit x=[0]*anzahl zu definieren? Dann enthält die Liste zunächst nur Nullen, die dann durch weitere Benutzereingaben durch andere Werte ausgetauscht werden.

    Wäre es dann so korrektes Python?
    Code:
    anzahl = input("anzahl: ") # wie viele werte eingegeben werden sollen
    
    x=[0]*anzahl
    
    for i in range(anzahl): # so viele werte wie anzahl angeben
        x[i-1] = input("Bitte eine Zahl eingeben ")
    
    x.sort()
    
    for i in range(anzahl):
        print x[i]
    
    print "programmende"
    
    Es scheint keinen Unterschied zu machen, ob ich x oder x[i-1] in der ersten for-Schleife wähle.
     
  6. juan_

    juan_ König

    Dabei seit:
    22.01.2004
    Beiträge:
    992
    Zustimmungen:
    0
    Ort:
    Berlin
    ohne python zu kennen, glaube ich, dass der Fehler in deinen for-Schleifen liegt.
    wenn du ein Array mit 5 Elementen hast, sind die Stellen 0-4 beschrieben. Also solltest du
    "for i in range(anzahl -1)" gehen, oder du sagst gleich array.length.

    das mit der Anzahlabfrage könntest du dir ersparen, indem du sagst:
    (nur Pseudocode)
    Code:
    while input == "" //mache solange die Eingabe gleich leer ist (also nur enter) 
      do
      x =  input("zahl eingeben") 
      x.push  //weiß nicht, wie eine Funktion in python heißt, die ein Element (=X) in das Array packt.
    
    array.sort
    print array
    
    hoffe geholfen zu haben.
    adieu
     
  7. #6 bytepool, 25.01.2009
    Zuletzt bearbeitet: 25.01.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    ich glaube du hast da einiges grundlegend nicht verstanden. Eine Liste ist kein Array! Du kannst Listen wie Arrays benutzen, die Liste muss dann aber entsprechend initialisiert sein. Ich sehe den Sinn nicht, die Liste erst mit Nullen zu initialisieren, auch wenn es moeglich ist. Eine Liste ist eine dynamische Datenstruktur. Die Loesung habe ich dir schon geschrieben, im Original Code musst du nur eine Zeile anpassen. Aus
    Code:
    x[i] = input(foo)
    
    mach
    Code:
    x.append(input(foo))
    
    Wieso du jetzt ploetzlich [i-1] schreiben willst ist mir schleierhaft. Damit bekommst du erst Recht Probleme, dann faengt dein Index bei -1 an. Auch bei deinem zweiten Stueck Code hast du vergessen x = [] voranzustellen.

    Edit: @juan_
    Nein, das war schon richtig so, die range() Funktion ist zugegebenermassen am Anfang gewoehnungsbeduerftig, aber er hat sie am Anfang schon absolut korrekt genutzt.

    Edit2:
    Hehe, ja, stimmt, x[-1] funktioniert in Python ja auch. ;)
    Wenn du also die Liste erst mit n Elementen initialisierst und x[i-1] schreibst, wuerfelst du nur die Reihenfolge der Liste durcheinander, aber es wird funktionieren. Jedenfalls wenn du nicht darauf angewiesen bist, dass die Werte in aufsteigender Folge in der Liste eingetragen werden. x[-1] gibt dir den letzten Listeneintrag. Der erste wird der letzte sein. ;)

    mfg,
    bytepool
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. juan_

    juan_ König

    Dabei seit:
    22.01.2004
    Beiträge:
    992
    Zustimmungen:
    0
    Ort:
    Berlin
    sorry,
    dachte, dass ich es ohne googlen schaffe :

    Code:
    >> range(10)
        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    trotzdem überflüssig ;)
     
  10. #8 oyster-manu, 26.01.2009
    oyster-manu

    oyster-manu toast

    Dabei seit:
    26.06.2003
    Beiträge:
    1.055
    Zustimmungen:
    0
    Ich hatte das x[i-1] von daboss.
    Danke für die Tipps, hab den Code nun angepasst.
     
Thema: Liste sortieren: index out of range
Besucher kamen mit folgenden Suchen
  1. python IndexError: list index out of range

    ,
  2. list index out of range deutsch

    ,
  3. indexerror list index out of range

    ,
  4. python list assignment index out of range list assignment index out of range,
  5. sys arv list ist out of range
Die Seite wird geladen...

Liste sortieren: index out of range - Ähnliche Themen

  1. amarok 2 Wiedergabeliste sortieren

    amarok 2 Wiedergabeliste sortieren: Moin! Gibt es bei amarok2 eine Möglichkeit die aktuelle Wiedergabeliste nach Namen, Titeln oder Alben zu sortieren oder Titel zu filtern, wie es...
  2. PYTHON: Listen innerhalb einer Liste nach einem bestimmten Feld sortieren

    PYTHON: Listen innerhalb einer Liste nach einem bestimmten Feld sortieren: Hallo zusammen, folgendes Problem: Ich habe eine Liste in der viele Listen vorhanden sind: a = [ ['Name', 'Vorname', 'Alter'], ['Name',...
  3. Hundertserver sucht Dich: Linux Spezialisten in Berlin.

    Hundertserver sucht Dich: Linux Spezialisten in Berlin.: Hundertserver sucht einen Linuxspezialiten in Berlin Hundertserver über sich: "Hundertserver bietet Unternehmen die Möglichkeit, digitale...
  4. Frankreich erneuert seine Referenzliste zu freier Software

    Frankreich erneuert seine Referenzliste zu freier Software: Frankreich hat die Ausgabe für 2016 von SILL, der Referenzliste zu freier Software zur Verwendung in französischen Amtsstuben herausgegeben....
  5. Rogue Wave übernimmt PHP-Spezialisten Zend

    Rogue Wave übernimmt PHP-Spezialisten Zend: Der PHP-Spezialist Zend Technologies wurde durch Rogue Wave aufgekauft. Mit der Übernahme will sich der US-Cross-Plattform-Hersteller verstärkt in...