2012-10-20 48 views
4

我想添加一個值到二維列表的元素。而是將值添加到列的所有元素。 任何人都可以幫忙嗎?Python的二維列表添加到元素的值

ROWS=3 
COLUMNS=5 
a=[[0] * (ROWS)] * (COLUMNS)  
for i in range(ROWS): 
    print (a[i])  
print("") 
x=5 
a[2][1]=a[2][1]+x 

for i in range(ROWS): 
    print (a[i]) 

回答

1

創建你列出這樣的:

In [6]: a = [[0 for _ in range(rows)] for _ in range(cols)] 

In [7]: a[2][1] = a[2][1] + 5 

In [8]: a 
Out[8]: [[0, 0, 0], [0, 0, 0], [0, 5, 0], [0, 0, 0], [0, 0, 0]] 

因爲你正在做的方式它,它實際上只是重複相同的列表對象,所以改變一個實際上改變了每一個他們。

In [11]: a = [[0] * (rows)] * (cols) 

In [12]: [id(x) for x in a] 
Out[12]: [172862444, 172862444, 172862444, 172862444, 172862444] #same id(), i.e same object 
4

a=[[0] * (ROWS)] * (COLUMNS) 

創建列表,而不是新的名單爲每列或行的副本。

使用列表理解來代替:

a = [[0 for _ in range(ROWS)] for _ in range(COLUMNS)] 

差的快速演示:

>>> demo = [[0]] * 2 
>>> demo 
[[0], [0]] 
>>> demo[0][0] = 1 
>>> demo 
[[1], [1]] 
>>> demo = [[0] for _ in range(2)] 
>>> demo 
[[0], [0]] 
>>> demo[0][0] = 1 
>>> demo 
[[1], [0]] 
+0

非常感謝!你的回答非常有幫助 –