kompliziertes Sortieren mehrerer Listen

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.
Mandos
User
Beiträge: 6
Registriert: Dienstag 21. Oktober 2008, 19:25

Mittwoch 22. Oktober 2008, 11:11

snafu hat geschrieben:Ein guter Anfang wäre es vielleicht, die zweite Liste mal zu zeigen. ;)

Aus dem Bauch heraus würde ich ein Dictionary empfehlen.
Die zweite Liste würde dann z.B. so aussehen:
['44,53', '35', '25', '46', '10', '27', '76', '48,67', '25', '18', '14']
Es handelt sich hierbei um Seitenzahlen. Was ich machen will ist einen Index für Latex zu machen, indem die zitierten Bibelstellen in der Reihenfolge der Bücher der Bibel und dann halt nach Kapitel und Vers geordnet mit zugehörigen Seitenzahlen aufgelistet werden. Bis auf das Sortieren nach Kapitel und Vers funktioniert auch alles.
BlackJack

Mittwoch 22. Oktober 2008, 11:39

Was bedeutet denn dann '44,53' als Seitanzahl(en)? Seite 44 bis 53? Würde man das nicht eher als '44-53' schreiben?

Wie schon gesagt, "parallele" Listen sind in der Regel keine gute Idee. Man könnte die Daten in ein Dictionary stecken das Bibelstellen den Zahlen zuordnet und dann `dict.items()` mit einer entsprechenden `key`-Funktion sortieren.

Oder man implementiert eine `Bibelstelle`-Klasse, die alle Angaben, inklusive der Seitenzahl(en) enthält und `__cmp__()` entsprechend implementiert, so dass man die Objekte sortieren kann.
Mandos
User
Beiträge: 6
Registriert: Dienstag 21. Oktober 2008, 19:25

Mittwoch 22. Oktober 2008, 11:46

44,53 bedeutet Seite 44 und Seite 53.

Also wenn das mit dem dictionary oder der klasse besser ist...wie aufwändig ist es, sich das jetzt anzueignen? Ich wollte eigentlich nur diesen Index machen und jetzt hab ich schon einige Stunden da dran verbracht und wurde von einem LaTex-forum auf Python verwiesen. Wie gesagt, meine Pythonkenntnisse sind nicht so groß.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Mittwoch 22. Oktober 2008, 12:02

BlackJack hat geschrieben:Was bedeutet denn dann '44,53' als Seitanzahl(en)? Seite 44 bis 53? Würde man das nicht eher als '44-53' schreiben?
Ich deute das ganze so: Mandos schreibt eine Art Haus-/Examens- o.ä. Arbeit, die Haufenweise Bibelstellen enthält, und zwar z.T. dieselbe Stelle auf verschiedenen Seiten seiner Arbeit.

Jetzt will er im Anhang eine Liste der verwendeten Bibelstellen sortiert nach biblischer Reihenfolge und dahinter jeweils alle Seitenzahlen, wo die Stelle verwendet wurde.

@Mandos:
Du brauchst nur die beiden Listen mit zip() zu Tupeln zusammenzusetzen, den sort-key aus meinem Posting etwas abzuändern und fertig:

Code: Alles auswählen

def eintragswert(eintrag):
    s = eintrag[0]
    s = s+",1" if not "," in s else s.replace("-",",").replace(".",",")
    return "".join([v.zfill(3) for v in s.split(",")])

stellen = ['2,8', '20,6','8,33-34', '8,33', '8,37-59', '1,42','8,33-35','8,44.45', '2,10', '2,13','5']
seiten = ['44,53', '35', '25', '46', '10', '27', '76', '48,67', '25', '18', '14']
eintraege = zip(stellen,seiten)
eintraege.sort(key=eintragswert)
for eintrag in eintraege:
    print "%8s: Seite %s" %(eintrag)
Liefert:

Code: Alles auswählen

    1,42: Seite 27
     2,8: Seite 44,53
    2,10: Seite 25
    2,13: Seite 18
       5: Seite 14
    8,33: Seite 46
 8,33-34: Seite 25
 8,33-35: Seite 76
 8,37-59: Seite 10
 8,44.45: Seite 48,67
    20,6: Seite 35
Mandos
User
Beiträge: 6
Registriert: Dienstag 21. Oktober 2008, 19:25

Mittwoch 22. Oktober 2008, 16:29

Vielen, vielen Dank!! Das funktioniert perfekt.
Benutzeravatar
snafu
User
Beiträge: 5531
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Mittwoch 22. Oktober 2008, 16:44

@Mandros: Es würde sicher einfacher sein, wenn du demnächst von Anfang an sagst, was du eigentlich vor hast. Zwar ist es immer gut, seinen eigenen Ansatz zu erwähnen (das zeigt Eigeninitiative und motiviert dadurch auch mehr Leute, dir zu helfen), aber man sollte auch ruhig erläutern, *warum* man das und das so haben will, sprich: was am Ende dabei herauskommen soll. Dann muss nämlich niemand darüber grübeln bzw. nachfragen, was das für komische Zahlen sind. Schließlich ist nicht immer ein Numerix zur Stelle. ;) (Mal davon ab, dass durch fehlende Informationen auch immer unnötig Zeit verplempert wird, vor allem die Zeit desjenigen, der mit seiner Hausarbeit weiterkommen will...)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Mittwoch 22. Oktober 2008, 17:22

ACK !
Antworten