Powinieneś użyć numpy.zeros
. Jeśli to nie jest opcja, chcesz pierwszą wersję. W drugiej wersji, jeśli zmienisz jedną wartość, zostanie on zmieniony w innym miejscu listy - np
>>> 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]]
To dlatego (jak można przeczytać na ekspresję od wewnątrz), należy utworzyć listę 10 zer. Następnie utworzysz listę 10 odnośników do tej początkowej listy 10 zer.
zauważyć, że:
zeros = [ [0]*M for _ in xrange(N) ]
będzie również pracować i unika zagnieżdżony listowych. Jeśli numpy
nie ma na stole, jest to forma, której użyłbym.
Czy to naprawdę konieczne stosowanie numpy prostu dla tej jednej funkcji? +1 dla pierwszej wersji. – John
@johnthexiii - Prawdopodobnie nie. Ale jeśli OP chce mieć tablicę zerową o liczbie 2d, byłbym gotów wyjść z założenia i powiedzieć, że kod OP mógłby prawdopodobnie korzystać z numpy również w innych miejscach. – mgilson
Nie zainstaluję numpy tylko dla zerowania listy;) Dzięki za późniejsze wyjaśnienie, to było to, czego szukałem. – yakxxx