Listen in Listen bearbeiten

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
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

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 ?
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

@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.
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

DANKE :D
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Antworten