sortieren von kompl. Liste

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
shadow07
User
Beiträge: 43
Registriert: Sonntag 22. Februar 2009, 16:29

ich habe eine Liste die etwa so aussieht:

Code: Alles auswählen

<tre.tdt.fht.htg.rgs instance at 0x30394f30>;(0, 5, 5, 920, 30, 0, 0, 'versuch nummer eins', None, None, None, None, None, None)
<tre.tdt.fht.htg.rgs instance at 0x3038cc38>;(0, 5, 5, 920, 30, 0, 0, 'noch ein versuch', None, None, None, None, None, None)
die versuche ich zu sortieren, und zwar alphabetisch/ Groß-/Kleinschreibung ignorieren nach den Feldern mit 'versuch'

ich packs nicht und brauch Hilfe (ich habe im Wiki und in etlichen Beiträgen gelesen, habe alles mögliche per try and error probiert, kommt aber nur Käse raus
ich hab 'ne kastrierte Form von Python, meine Scripte müssen ohne Nachinstallationen auskommen..........
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

nichts davon ist eine Liste. Der Teil in Klammern '()' ist mit einigem guten Willen vielleicht als Tupel aufzufassen. Aber selbst wenn es eine Liste

Code: Alles auswählen

['versuch nummer eins', None, None, None, None, None, None]
gäbe, wäre eine alphabetische Sortierung Unsinn, da ja es ja nur einen String gibt.

Magst Du uns vielleicht verraten, was das *eigentlich* werden soll?

Gruß,
Christian
shadow07
User
Beiträge: 43
Registriert: Sonntag 22. Februar 2009, 16:29

sorry, ich hätte anmerken müssen, das ich mir den Inhalt der Liste mit

Code: Alles auswählen

tag1 = str(tag[0]) + ";" + str(tag[1])+'\n'
in eine Datei ausgeben lasse (so wie es oben aussieht), damit ich überhaupt sehe was da drin ist
ich hab 'ne kastrierte Form von Python, meine Scripte müssen ohne Nachinstallationen auskommen..........
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

shadow07 hat geschrieben:sorry, ich hätte anmerken müssen, das ich mir den Inhalt der Liste mit

Code: Alles auswählen

tag1 = str(tag[0]) + ";" + str(tag[1])+'\n'
in eine Datei ausgeben lasse (so wie es oben aussieht), damit ich überhaupt sehe was da drin ist
Aber so richtig viel ändert das nicht an dem, was CM angemerkt hat: Wie soll denn etwas alphabetisch sortiert werden, was gar keine Zeichenkette ist?

Wenn du etwas darüber verrätst, was das eigentliche Ziel ist - z.B. mal an einem Beispiel zeigen, wie der sortierte Zustand nach deinen Vorstellungen aussehen sollte, würde man wahrscheinlich weiter kommen.
shadow07
User
Beiträge: 43
Registriert: Sonntag 22. Februar 2009, 16:29

sortiert müsste die Liste in diesem Fall genau anders herum sein, weil alphabetisch:

noch ein versuch
versuch nummer eins

also, die gesamte Ursprungsliste (nicht die Strings die ich hier anzeige) soll in ihrer Reihenfolge nach diesen Strings alphabetisch sortiert werden - ich hoffe, ich habe das jetzt klarer beschrieben

der Kontext, in dem die Liste vorkommt, hilft hier wenig, da eine ziemliche Menge Code zum entstehen und weiterverarbeiten der Liste drumherum ist und ich diesen nicht verändern will
ich hab 'ne kastrierte Form von Python, meine Scripte müssen ohne Nachinstallationen auskommen..........
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Vielleicht hilft Dir so was einfaches schon mal weiter:

Code: Alles auswählen

sorted(["hallo","bla","alpha"])
ichbinsisyphos
User
Beiträge: 120
Registriert: Montag 4. Juni 2007, 19:19

Die Tupel vom ersten Post sind einzelne Einträge in der Liste die du sortieren willst?

Zum sortieren von Listen gibts sorted(list) und list.sort().
shadow07
User
Beiträge: 43
Registriert: Sonntag 22. Februar 2009, 16:29

also so wie ich es verstehe:
jeder Listeneintrag enthält widerum 2 Listen, wobei die zweite Liste einen String enthält nachdem ich die Hauptliste sortieren will
ich hab 'ne kastrierte Form von Python, meine Scripte müssen ohne Nachinstallationen auskommen..........
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

shadow07 hat geschrieben:also so wie ich es verstehe:
jeder Listeneintrag enthält widerum 2 Listen, wobei die zweite Liste einen String enthält nachdem ich die Hauptliste sortieren will
Ich glaube, ich hab's verstanden:

Code: Alles auswählen

elemente = [[(3,4,5,4), (0,6,5,5,7,4,9,"Hier der Text",None,None,None)],
            [(5,4,7,4), (0,6,6,5,7,4,9,"Anderer Text",None,None,None)],
            [(3,4,3,4), (0,7,5,5,8,4,9,"Beliebiger Text",None,None,None)]]

elemente.sort(key=lambda x:x[1][7])
print elemente
shadow07
User
Beiträge: 43
Registriert: Sonntag 22. Februar 2009, 16:29

Heureka! so geht es!

könntest du mir auch verraten, was die x:x bewirken? der Rest ist mir klar:[zweite Liste][achtes element]
ich hab 'ne kastrierte Form von Python, meine Scripte müssen ohne Nachinstallationen auskommen..........
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

shadow07 hat geschrieben:Heureka! so geht es!

könntest du mir auch verraten, was die x:x bewirken? der Rest ist mir klar:[zweite Liste][achtes element]
Die sort()-Methode kennt hat als optionales Schlüsselwortargument key eine Funktion mit exakt einem Argument (nämlich einem der zu sortierenden Elemente) und liefert einen Wert zurück, nachdem sortiert werden soll. Dafür habe ich einen lambda-Ausdruck gewählt. Muss man aber nicht. Eine äquivalente Fassung wäre:

Code: Alles auswählen

def sortkey(element):
    return element[1][7]

elemente.sort(key=sortkey)
shadow07
User
Beiträge: 43
Registriert: Sonntag 22. Februar 2009, 16:29

vielen Dank, ich werd es öfter brauchen können und habe es nun besser verstanden als im Wiki
ich hab 'ne kastrierte Form von Python, meine Scripte müssen ohne Nachinstallationen auskommen..........
Antworten