Hallo Zusammen,
ich habe ein Problem, bei dem ich nicht weiter komme, und zwar:
Ich habe eine beliebig lange Liste aus 1 und 0. Z.Bsp.:
a = [0, 0, 0, 1, 1, 0, 0]
Die Liste soll in eine neue Liste überführt werden in der die Anzahl der aufeinanderfolgenden 0 bzw. 1 gelistet sind.
Für die Liste oben also:
b = [3, 2, 2]
Es wäre toll, wenn mir hier jemand weiterhelfen könnte!
Viele Grüße
MCK
Liste aus 1 und 0 auswerten
Hallo!
Schau dir mal die groupby-Funktion im itertools-Modul an, damit kannst du das ganz leicht lösen:
Schau dir mal die groupby-Funktion im itertools-Modul an, damit kannst du das ganz leicht lösen:
Code: Alles auswählen
>>> import itertools
>>> xs = [0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1]
>>> for i, ys in itertools.groupby(xs):
... print(i, list(ys))
...
0 [0, 0]
1 [1, 1, 1, 1]
0 [0]
1 [1]
0 [0, 0, 0, 0]
1 [1]Das Leben ist wie ein Tennisball.
@MCK: und welche Gedanken hast Du Dir schon darüber gemacht, wie man das Problem angehen könnte? Du kennst sicher schon Schleifen und if-Abfragen.
Versuche das Problem so umzuformulieren, dass es auf eine Schleifenverarbeitung passt: für jedes Element aus der Liste prüfe, wenn 0 dann ... wenn 1 dann ...
Versuche das Problem so umzuformulieren, dass es auf eine Schleifenverarbeitung passt: für jedes Element aus der Liste prüfe, wenn 0 dann ... wenn 1 dann ...
- __blackjack__
- User
- Beiträge: 14303
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Das externe `more_itertools` hat was nützliches was einen auch recht nah ans gewünschte Ergebnis führt:
Code: Alles auswählen
In [95]: xs = [0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1]
In [96]: list(more_itertools.run_length.encode(xs))
Out[96]: [(0, 2), (1, 4), (0, 1), (1, 1), (0, 4), (1, 1)]„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
