Seite 1 von 1

liste systematisch erweitern und in einer metaliste speichern

Verfasst: Montag 7. März 2022, 11:43
von blutigeranfaenger
Hallo zusammen,
ich möchte eine Liste gerne systematisch um jeweils ein Element erweitern und das ganze in einer metaliste speichern.
Das Endergebnis soll so aussehen:

Code: Alles auswählen

liste_a = [10,3]
liste_b =  [9,3,3]
liste_c= [8,3,3]  # usw, bis liste_h = [3, 3, 3, 3, 3, 3, 3, 3, 3]
metaliste = [liste_a,liste_b,liste_c,liste_d,liste_e,liste_f,liste_g,liste_h]
Es geht mir am Ende um gewichtete Wahrscheinlichkeiten: beim ersten Mal gibt es nur zwei Elemente zur Auswahl, wobei die Wahrscheinlichkeit für das erste Element mehr als drei mal so hoch ist, am Ende sind es 9 Elemente mit gleich hoher Wahrscheinlichkeit.
Wenn ich folgende mache, kommt auf der Konsole das gewünschte Ergebnis:

Code: Alles auswählen

#!/usr/bin/env python3
neliste = [10,3]
for i in range(8):
    print(neliste)
    neliste.append(3)
    neliste[0] = neliste[0] -1
Es klappt aber nicht, und da stelle ich mich wahrscheinlich ziemlich doof an,das ganze in einer neuen Variablen zu speichern. Jedenfalls kommt nach

Code: Alles auswählen

#!/usr/bin/env python3
metaliste = [ ]
neliste = [10,3]
for i in range(8):
    neliste.append(3)
    neliste[0] = neliste[0] -1
    metaliste.append(neliste)
print(metaliste)
folgendes Ergebnis:

Code: Alles auswählen

[[2, 3, 3, 3, 3, 3, 3, 3, 3, 3], [2, 3, 3, 3, 3, 3, 3, 3, 3, 3], [2, 3, 3, 3, 3, 3, 3, 3, 3, 3], [2, 3, 3, 3, 3, 3, 3, 3, 3, 3], [2, 3, 3, 3, 3, 3, 3, 3, 3, 3], [2, 3, 3, 3, 3, 3, 3, 3, 3, 3], [2, 3, 3, 3, 3, 3, 3, 3, 3, 3], [2, 3, 3, 3, 3, 3, 3, 3, 3, 3]]
Wie kann ich das gewünschte Ergebnis erzielen?
Danke für Eure Geduld!

Re: liste systematisch erweitern und in einer metaliste speichern

Verfasst: Montag 7. März 2022, 12:03
von Sirius3
Du veränderst immer die selbe Liste, anstatt dass Du neue Listen erzeugst. Listen verändern ist deshalb in Python selten eine gute Idee.
Warum erzeugst Du nicht die Listen direkt?

Code: Alles auswählen

metaliste = [
    [i] + [3] * (11 - i)
    for i in range(10, 1, -1)
]

Re: liste systematisch erweitern und in einer metaliste speichern

Verfasst: Montag 7. März 2022, 12:19
von blutigeranfaenger
Cool, danke!
Mir war nicht klar dass man innerhalb von [ ] einen loop erzeugen kann,
oder habe ich da etwas falsch verstanden?

Re: liste systematisch erweitern und in einer metaliste speichern

Verfasst: Montag 7. März 2022, 12:40
von einfachTobi
Nein, hast du richtig verstanden. Das Stichwort ist list comprehension.

Re: liste systematisch erweitern und in einer metaliste speichern

Verfasst: Montag 7. März 2022, 13:13
von blutigeranfaenger
Ok, das werde ich mir genauer zu Gemüte führen!