2016-08-04 27 views
0
a = 2 
b = 3 
c = 4 
x = y = z = [0 for i in xrange(a*b*c)] 

Gibt es eine Möglichkeit, in der x, y, z kann in einer Zeile initialisiert werden (weil ich nicht will, b und c für jede Liste Initialisierung multiplizieren), als separate Listen von 0s. Wenn oben x aktualisiert wird, werden y und z gleichzeitig mit den gleichen Änderungen aktualisiert.initialisieren mehrere Listen in Python

Antwort

3

einfach ein anderes Verständnis verwenden und entpacken Sie es:

x, y, z = [[0 for i in xrange(a*b*c)] for _ in xrange(3)] 

Beachten Sie, dass [0 for i in xrange(a*b*c)] der einfacheren [0] * a*b*c entspricht.

+0

Wie wäre es mit einem Generator, damit die Liste nicht tatsächlich gebaut wird? 'a, b, c = ([0 für i in xrange (a * b * c)] für _ in xrange (3))' – Netwave

+0

@DanielSanchez - Wir könnten das sicher tun. Wenn Sie jedoch einen Leistungsvorteil sehen, müssen Sie viel mehr Listen erstellen, als in mehreren unabhängigen Variablen in einer einzigen Zeile entpackt werden sollen. Es muss nur die Referenzen speichern, die klein sind. – TigerhawkT3

+0

bitte können Sie ein wenig weiter erklären, wie ich sehe, bauen Sie die eine Liste, die eine andere Liste enthält, aber Sie werden diese Liste nie verwenden. Mit einem Generator werden Sie diese Liste einfach los. Bin ich falsch oder verpasse etwas? Vielen Dank!! – Netwave

0

in Ihrer erklärten Absicht der Suche anstatt in der "eine Zeile Anforderung:

a = 2 
b = 3 
c = 4 
x = [0 for i in xrange(a*b*c)] 
y = x [:] 
z = x [:] 

nicht sicher, dass der Optimierer ist klug genug, wiederholte Multiplikation an zu vermeiden:

x, y, z = [[0 for i in xrange(a*b*c)] for _ in xrange(3)] 

Angenommen, a, b und c waren Eigenschaften, also würde das Lesen von ihnen Nebenwirkungen haben. Wie kann der Optimierer dies in einer dynamisch typisierten Sprache wissen?