Liste aus 1 und 0 auswerten

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
MCK
User
Beiträge: 2
Registriert: Mittwoch 3. Juni 2020, 00:27

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo!

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.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@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 ...
Benutzeravatar
__blackjack__
User
Beiträge: 13100
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)]
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
MCK
User
Beiträge: 2
Registriert: Mittwoch 3. Juni 2020, 00:27

Hallo,

vielen Dank für die Hilfe, jetzt habe ich es hinbekommen.
Antworten