2017-10-14 29 views
0

我要展開一個二維數組:如何基於一些

num = 3 
array = [0,0,0,0,0] 

成爲這樣的:

array = ([0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]) 

我已經試過這樣:

array = ([0,0,0,0,0],)*num 

和這樣的:

array = [[0,0,0,0,0]]*num 

但是當我設置值時,它將它設置在任何地方。

num = 3 
array = [[0,0,0,0,0]]*num 
print(array) 
array[0][0] = 1 
array[1][1] = 2 
print(array) 

[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] 
[[1, 2, 0, 0, 0], [1, 2, 0, 0, 0], [1, 2, 0, 0, 0]] 

當它應該是:

[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] 
[[1, 0, 0, 0, 0], [0, 2, 0, 0, 0], [0, 0, 0, 0, 0]] 

回答

0

使用List Comprehensions打造2D list。你正在做的事實際上是使3(num)引用同一個列表!要理解它要好得多,考慮這個例子

>>> a=b=[5] 
>>> a[0] = 6 
>>> a 
[6] 
>>> b 
[6] 

因此,使用列表解析,讓所有的內部名單「獨特」。

num = 3 
array = [[0,0,0,0,0] for i in range(num)] 
print(array) 
array[0][0] = 1 
array[1][1] = 2 
print(array) 

輸出:

[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] 
[[1, 0, 0, 0, 0], [0, 2, 0, 0, 0], [0, 0, 0, 0, 0]]