Hallo zusammen, ich habe eine sehr lange Liste (> 20.000 Zeilen aus CSV-Datei) der Form: [10, 1, 1] [12, 0, 36] [14, 60, 69] [16, 0, 42] [18, 0, 17] [10, 7, 5] [12, 14, 8] ... Dies wiederholt sich mit verschiedenen Werten. Was ich jetzt benötige ist eine Zusammenfassung von den Zeilen zu einer Zeile unter der Vorraussetzung, dass die Werte der Spalte 1 eindeutig sind. Anders formuliert: Mache aus der Liste oben die folgende Zeile: [10, 1, 1, 12, 0, 36, 14, 60, 69, 18, 0, 17] Im Endeffekt muss ich mir fünf Zeilen nehmen, gucken ob in der ersten Spalte die Zahlen 10 bis 18 vorkommen und wenn ja diese in eine neue Liste kopieren mit neueListe.append(alteListe[0], alteListe[1], ...). Anschließend kommen die nächsten fünf Zeilen. Nun habe ich verschiedene Probleme: Zum Einen kann es vorkommen, dass z.B. die 12 zwei mal hintereinander vorkommt. Zum Anderen: wie kann ich abfragen wann ich die alte Liste vollständig abgearbeitet habe? Ich hoffe auf eure Hilfe! Gruß Dennis
Gast
#3061042
Hi, Dennis S. schrieb: > ich habe eine sehr lange Liste (> 20.000 Zeilen aus CSV-Datei) der Form: > [10, 1, 1] > [12, 0, 36] > [14, 60, 69] > [16, 0, 42] > [18, 0, 17] > [10, 7, 5] > [12, 14, 8] > ... > > Dies wiederholt sich mit verschiedenen Werten. Was ich jetzt benötige > ist eine Zusammenfassung von den Zeilen zu einer Zeile unter der > Vorraussetzung, dass die Werte der Spalte 1 eindeutig sind. > > Anders formuliert: Mache aus der Liste oben die folgende Zeile: > [10, 1, 1, 12, 0, 36, 14, 60, 69, 18, 0, 17] Wo bleiben die Zeilen [10, 7, 5] und [12, 14, 8]? Vielleicht was in die Richtung?
1 | |
2 | |
3 | |
4 | |
Ach ja: Python ist ziemlich flott. 20k Zeilen sind auf einem halbwegs aktüllen Rechner eher pillepalle. LG, Klaus
Klaus Maus schrieb: > Wo bleiben die Zeilen [10, 7, 5] und [12, 14, 8]? Die werden in die nächste Zeile geschmissen [10, 1, 1, 12, 0, 36, 14, 60, 69, 18, 0, 17], [10, 7, 5, 12, 14, 8, ....] > Vielleicht was in die Richtung? Gute Idee, schaue ich mir mal genauer an! > Ach ja: Python ist ziemlich flott. 20k Zeilen sind auf einem halbwegs > aktüllen Rechner eher pillepalle. Damit wollte ich auch nur den Vorschlag ausschließen, das händisch zu machen! ;-) Gruß Dennis
Gast
#3061099
Beschreib dein Problem mal genauer (was ist mit den 5 Zeilen etc), dann kann man dir genauer helfen. Hört sich im Grunde aber nicht sehr schwer an.
Der Beitrag von Klaus war schon recht hilfreich, aber ich versuche es nochmals zu formulieren: Ich nenne die erste Spalte jetzt "ID". Es könnten die ID 10, 12, 14, 16 und 18 auftreten, jedoch nicht zwangsläufig in der Reihenfolge und / oder gleich häufig (d.h. doppeltes Auftreten direkt hintereinander ist möglich, fehlen auch jedoch selten). Grundsätzliches Ziel ist es eine Liste folgender Art zu bekommen: 1. Zeile beinhaltet das erste Auftreten aller ID inkl. "Daten" 2. Zeile beinhaltet das zweite Auftreten aller ID inkl. "Daten" 3. Zeile beinhaltet das dritte Auftreten aller ID inkl. "Daten" Jedoch soll erst eine neue Zeile "angefangen" werden, wenn das Set komplett ist. Kommt also die Zeile mit der ID 12 zweimal vor, so wird das erste oder zweite Vorkommen (unwichtig) ignoriert und zunächst nach der 14 gesucht. Sollte eine ID fehlen (bspw. die 14) soll das komplette Set verworfen werden. "Startpunkt" des Algorithmus soll die ID 10 sein. Also etwas in die Richtung wie: wenn ID = 10 dann füge Daten zur Liste hinzu, wenn ID = 12 und ID 10 bereits in Liste, füge Daten von ID 12 hinzu, wenn ID = 14 und ID 14 bereits in Liste, füge Daten von ID 14 hinzu, ... Ist das verständlicher? Gruß Dennis
Gast
#3061818
Tut das was du willst? (wenn Reihenfolge der IDs z.b. 10,14,12, ... ist wird die 14 ignoriert, da die 12 vorher fehlt. Richtig so?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
Da ich nicht weiß wie fit du in Python bist: das ist ein Generator, falls du wirklich eine Liste brauchst kannst du z.b. einfach list(transform(liste)) schreiben. Und tu dir den Gefallen und setze einen vernünftigen Funktionsnamen, transform heißt die nur weil ich keine Ahnung habe was sie eigentlich tun soll.
Gast
#3061819
KORREKTUR: das id_index+=1 (Zeile 8) muss eins weiter eingerückt werden, da habe ich beim kopieren ausversehen einen TAB gelöscht scheinbar.
Gast
#3061826
Sorry triplepost... Vorhin Klausur geschrieben, ich bin noch abgelenkter als ich dachte. Beim 2. if das -1 von len(ids)-1 noch weg...
Hallo adsf,
vielen Dank schon mal! Ich habe in der Tat sehr wenig Python-Erfahrung
und das Thema Generatoren ist mir völlig unbekannt...
Ich habe jetzt den Code von dir an den Kopf meiner Quelldatei gepastet.
Den Aufruf mache ich wie ich es häufiger im Netz gefunden habe mit
for n in transform(dataSet):
print n
Leider kommt keine Ausgabe... Was habe ich übersehen?
Gruß Dennis
Mein Ansatz scheint zu funktionieren, ist aber vermutlich sehr dreckig programmiert..
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
>Mein Ansatz scheint zu funktionieren nein, >Nun habe ich verschiedene Probleme: Zum Einen kann es vorkommen, dass >z.B. die 12 zwei mal hintereinander vorkommt. 10, 12, 12, 14, 16, 18 lässt dein Programm KOMPLETT aus...
Ja, dessen bin ich mir bewusst. Aber ich finde im Moment keine andere Möglichkeit und dies ist "besser" als ein unvollständiges Datenset. Gruß Dennis
Gast
#3062537
Dennis S. schrieb: > for n in transform(dataSet): > print n Sollte gehen. Ich habe einfach deine Beispiel oben als Liste testweise reingefüttert und es kam was raus? also dataSet=[[10, 1, 1],[12, 0, 36],[14, 60, 69],[16, 0, 42],[18, 0, 17],[10, 7, 5],[12, 14, 8]]
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.