Alle mit Länge,Python: Einfügen in eine Liste als Index
Ich habe vor kurzem Python aufgenommen und derzeit in dem Prozess mit Listen umzugehen. Ich benutze eine Testdatei, die mehrere Zeilen von Zeichen enthält, die durch einen Tab eingerückt sind und dann dieses in mein Python-Programm weiterleiten. Das Ziel meines Python-Skripts ist es, jede Zeile in eine Liste einzufügen, wobei die Länge als Index verwendet wird, was bedeutet, dass die Liste automatisch sortiert wird. Ich denke über den grundlegendsten Fall nach und mache mir keine Gedanken über komplizierte Fälle.
Mein Python-Code unten;
newList = []
for line in sys.stdin:
data = line.strip().split('\t')
size = len(data)
newList.insert(size, data)
for i in range(len(newList)):
print (newList[i])
Meine 'Test' Datei unten;
2 2 2 2
1
3 2
2 3 3 3 3
3 3 3
Meine Erwartung der Ausgabe des Python-Skript ist, den Inhalt der Liste in der folgenden Reihenfolge sortiert nach Länge zu drucken;
['1']
['3', '2']
['3', '3', '3']
['2', '2', '2', '2']
['2', '3', '3', '3', '3']
Wenn ich jedoch meine Testdatei an mein Python-Skript übergeben, bekomme ich Folgendes;
cat test | ./listSort.py
['2', '2', '2', '2']
['1']
['3', '2']
['3', '3', '3']
['2', '3', '3', '3', '3']
Die erste Zeile des Ausgangs [ '2', '2', '2', '2'] ist falsch. Ich versuche herauszufinden, warum es nicht in der 4. Zeile gedruckt wird (wegen Länge 4 würde es bedeuten, dass es in den 4. Index der Liste eingefügt worden wäre). Könnte jemand bitte einen Einblick geben, warum das so ist? Mein Verständnis ist, dass ich jede 'Daten' in die Liste einfügen werde, wobei 'Größe' als Index verwendet wird, was bedeutet, dass wenn ich den Inhalt der Liste ausdrücke, sie in sortierter Reihenfolge gedruckt werden würden.
Vielen Dank im Voraus!
Versuchen Sie, Ihren Algorithmus zu wiederholen Stift & Papier und Sie werden sehen, warum das Ergebnis falsch ist. – mkrieger1
Beachten Sie auch die "nutzlose Verwendung von cat": 'cat filename | Programm 'ist dasselbe wie' Programm
mkrieger1
Oder wenn Ihr Verständnis von Listen falsch ist, dann hilft Ihnen die Verwendung von Stift & Papier vielleicht nicht ... Die Sache ist, dass wenn Sie eine Liste von Länge * N * haben, etwas in den Index * n *> * N * einfügen Hängen Sie es an das Ende der Liste an. Z.B. Das Einfügen von "x" in eine leere Liste (* N * = 0) bei Index "4" führt nur zu einer Liste "[x]", nicht etwa wie "[-, -, -, -, x]". – mkrieger1