È necessario utilizzare numpy.zeros
. Se questa non è un'opzione, vuoi la prima versione. Nella seconda versione, se si cambia un valore, esso sarà cambiato altrove nella lista - ad esempio:
>>> a = [[0]*10]*10
>>> a
[[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, 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, 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]]
>>> a[0][0] = 1
>>> a
[[1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
Questo perché (come si legge l'espressione dall'interno verso l'esterno), si crea un elenco di 10 zeri. Quindi si crea un elenco di 10 riferimenti a quell'elenco iniziale di 10 zeri.
Nota che:
zeros = [ [0]*M for _ in xrange(N) ]
lavorerà anche ed evita la lista di comprensione nidificato. Se numpy
non è sul tavolo, questo è il modulo che userei.
È proprio necessario utilizzare NumPy semplicemente per quella singola caratteristica? +1 per la prima versione. – John
@johnthexiii - Forse no. Ma, se l'OP vuole un array di zeri 2d, sarei disposto ad andare su un arto e dire che il codice OP potrebbe probabilmente trarre beneficio da Numpy anche in altri posti. – mgilson
non installerò numpy solo per azzerare la lista;) Grazie per la spiegazione successiva, era quello che stavo cercando. – yakxxx