2017-07-03 1 views
0

ich verschachtelte Liste von arbitruary Größe NXM-Unterschied in der Listenerstellung in Python

annehmen N = 3 zu schaffen versuchen, M = 3 wenn ich eine Liste wie diese

c = [0 for col in range(N)] 
c = [c for r in range(M)] 
print c 

erstellen und auszuführen

c[0][0]=1 

ich

c = [[1, 0, 0], [1, 0, 0], [1, 0, 0]] 

Aber wenn ich eine Liste wie folgt zu erstellen:

c = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 

und führen

c[0][0] = 1 

I

bekommen
c = [[1, 0, 0], [0, 0, 0], [0, 0, 0]] 

: Ich bin in Python, kann mir jemand eine Idee geben?

+0

Sie platziert die gleiche Unterliste 'c' über die Liste. –

+0

Ja, aber warum aktualisiert man 3 Werte im ersten Fall c [0] [0], c [1] [0], c [2] [0] –

Antwort

0

Im Listenverständnis erstellen Sie einen Verweis auf jedes Element in der Liste. Das bedeutet, dass jedes Element mutiert wird, wenn nur auf einen Index zugegriffen wird und dieser aktualisiert wird.

c = [0 for col in range(3)] 
c = [c for r in range(3)] 

c[0][0] = "Test" 

Ausgang:

[['Test', 0, 0], ['Test', 0, 0], ['Test', 0, 0]] 

Edit:

Eine verschachtelte Liste beliebiger Größe:

import random 

new_list = [[0 for i in range(random.randint(1, 10))] for b in range(random.randint(1, 10))] 

Ausgang:

[[0, 0, 0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0], [0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] 
+0

danke Ajax, das war schnell, wie kann ich ein erstellen verschachtelte Liste der arbitruary Größe während der Laufzeit –

+0

Bitte beachten Sie meine letzten Änderung. – Ajax1234

+0

danke nochmal, das funktioniert –

0

Jede Liste ist ein Objekt .... Im ersten Fall erstellen Sie ein Listenobjekt und verweisen es mit einer Referenzvariablen 'c'. Wenn Sie also ein bestimmtes Element in 'c' ändern, wird es in der Hauptliste angezeigt.

dh

Erster Fall

c = Liste ([0,0,0]) c = Liste ([c, c, c])

so, wenn Sie Element ändern in einem 'c' spiegelt es in allen

Verwandte Themen