Seite 1 von 2

Verfasst: Mittwoch 22. Oktober 2008, 11:11
von Mandos
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.

Verfasst: Mittwoch 22. Oktober 2008, 11:39
von BlackJack
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.

Verfasst: Mittwoch 22. Oktober 2008, 11:46
von Mandos
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ß.

Verfasst: Mittwoch 22. Oktober 2008, 12:02
von numerix
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

Verfasst: Mittwoch 22. Oktober 2008, 16:29
von Mandos
Vielen, vielen Dank!! Das funktioniert perfekt.

Verfasst: Mittwoch 22. Oktober 2008, 16:44
von snafu
@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...)

Verfasst: Mittwoch 22. Oktober 2008, 17:22
von numerix
ACK !