Seite 1 von 1

Listen in Listen bearbeiten

Verfasst: Mittwoch 23. November 2016, 17:41
von Septias
Hi,

ich habe mehrer Listen, in einer Liste, in denen Nullen als Strings enthalten sind.
Nun möchte in einer Liste an einem bestimmten Index den Null-string durch einen anderen austauschen (zb. "g").
Das Problem ist, dass aber alle Listen verändert.

Code: Alles auswählen

>>> list = 3*[5*["0"]]
>>> print list
[['0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0']]
>>> list[0][1] = 2
>>> print list
[['0', 2, '0', '0', '0'], ['0', 2, '0', '0', '0'], ['0', 2, '0', '0', '0']]
Wie kann ich nur eine Liste bearbeiten ?

Re: Listen in Listen bearbeiten

Verfasst: Mittwoch 23. November 2016, 17:49
von Sirius3
@Septias: Du hast nur *eine* Liste drei mal in Deiner Liste "list". Du mußt schon drei Listen anlegen.

Code: Alles auswählen

nullen = [5*["0"], 5*["0"], 5*["0"]]
>>> print nullen 
[['0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0']]
>>> nullen[0][1] = 2
>>> print nullen 
[['0', 2, '0', '0', '0'], ['0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0']]
Übrigens ist "list" ein schlechter Name, weil er den eingebauten Typ "list" überdeckt.
In einer Liste sollten nur gleichartige Elemente sein, String und Zahl sind höchstwahrscheinlich nicht gleichartig. Statt Listen-Eintrage zu verändern erzeugt man in Python typischerweise neue Listen.

Re: Listen in Listen bearbeiten

Verfasst: Mittwoch 23. November 2016, 18:21
von Septias
@Sarius
Danke ;D,

aber gibt es einen Befehl, oder ne Funktion, mit der man dann Listen mit dieser Struktur machen kann ?

(Also ich wollte nen Level für nen Spiel in so einer Liste mache. Hab dann nen Level-editor dafür gemacht und brauch jetzt erste mal ne leere Welt.
Jede Liste in der Liste stell dabei ein Reihe da und wenn der str ne "0" ist dann wird er übersprungen usw.)

Deswegen brauch ich halt nen Befelt mit dem ich x-Listen in einer List mit x-Objekten die Blöcke darstellen machen kann.

Re: Listen in Listen bearbeiten

Verfasst: Mittwoch 23. November 2016, 19:20
von /me
Septias hat geschrieben:aber gibt es einen Befehl, oder ne Funktion, mit der man dann Listen mit dieser Struktur machen kann ?
Du kannst dir eine einfache Funktion schreiben die diese Aufgabe erfüllt.

Code: Alles auswählen

def create_grid(x, y):
    return [list('0' * x) for _ in range(y)]

data = create_grid(3, 4)
print(data)
Der Code verwendet eine list comprehension für die äußere Liste und nutzt aus, dass sich Strings problemlos in eine Liste überführen lassen.

Re: Listen in Listen bearbeiten

Verfasst: Mittwoch 23. November 2016, 21:01
von Septias
DANKE :D