Schwieriges Dic bauen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Bykl
User
Beiträge: 92
Registriert: Donnerstag 5. Oktober 2017, 17:57

Hallo ich hab folgende Liste:
lista=[0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0]

und ich möchte ein Dic dazu mit folgender Ausgabe kreiren:
dica={1: 2, 4: 1, 7: 1, 10: 1, 12: 2}
Key ist also der Index der 1, die auf eine Null folgt
Value ist die Länge des Abschnittes, der nur aus Einsen besteht

Code: Alles auswählen

for y in lista:
    if y==1 and lista[-1]:
       dica.update({0:y})
    else:
      dica.update({y:1}) 
print(dice)
Bis auf die erste Zeile scheint alles falsch zu sein... Wer kann weiterhelfen?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

`dice` wird nirgends definiert. Auch die Zeile, um dica zu initialisieren fehlt. Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht mal 3 oder 2 und dann wieder 4.
Beim Programmieren muß man sehr sorgfältig arbeiten. Wenn Du es nicht schaffst, bei einer Frage im Forum diese Sorgfalt anzuwenden, dann sieht das mit dem Programmieren insgesamt schlecht aus.
Wenn man ein Element in einem Wörterbuch setzen will, benutzt man [] nicht update.

Code: Alles auswählen

lista=[0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0]
dica = {}
for y in lista:
    if y == 1 and lista[-1]:
        dica[0] = y
    else:
        dica[y] = 1
print(dica)
Du willst eine Art Run-Length-Encoding programmieren.
Du brauchst also neben dem Wert der Listenelemente auch deren Index, das bekommt man mit `enumerate`. Dann einen Status, ob Du gerade in einer 0-Folge oder in einer 1-Folge bist. Beim Übergang von 0 nach 1 mußt Du Dir den Startindex merken und beim Übergang von 1 nach 0 aus dem Endindex die Länge berechnen.
Bykl
User
Beiträge: 92
Registriert: Donnerstag 5. Oktober 2017, 17:57

DankeSirius, für die schnelle Antwort, arbeite = durch! dice ist Verschreibung gemeint ist dica
Benutzeravatar
DeaD_EyE
User
Beiträge: 1017
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ich habs umgekehrt gemacht. Eine Generator-Funktion, die einfach tuplen mit index und zählwert ausgibt. Ein dict kann den Generator direkt konsumieren.

Code: Alles auswählen

def non_zero_index_count(data):
    last_element = None
    last_count = 1
    last_index = 0

    for index, current_element in enumerate(data):
        if last_element is None:
            last_element = current_element
            continue

        if last_element == current_element:
            last_count += 1
        else:
            if last_element != 0:
                yield last_index, last_count

            last_count = 1
            last_index = index

        last_element = current_element


print(dict(non_zero_index_count([0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0])))
{1: 2, 4: 1, 7: 1, 10: 1, 12: 2}
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten