2013-11-21 34 views
0

我正在嘗試增加一個2d數組中的值,我正在做一個遊戲,但是我在每個數組中獲得相同的值。這是代碼:在2d數組中增加值?

def matrix(grid): 

    nrows = len(grid) 
    ncols = len(grid[0]) 

    for i in range(nrows): 
     for j in range(ncols): 
      grid[i][j] += 10 

    for row in grid: 
     print(row) 

rows = 4 
cols = 4 
grid = [[0 for i in range(cols)] for i in range(rows)] 
matrix(grid) 

輸出是:

[10, 10, 10, 10] 
[10, 10, 10, 10] 
[10, 10, 10, 10] 
[10, 10, 10, 10] 

在哪裏,我想它是

[10, 20, 30, 40] 
[10, 20, 30, 40] 
[10, 20, 30, 40] 
[10, 20, 30, 40] 

此外,是否有可能錯開,用兩個嵌套的循環爲每一行提供遞增值?如:

[10, 20, 30, 40] 
[20, 40, 60, 80] 
[10, 20, 30, 40] 
[20, 40, 60, 80] 

回答

1

你可以試試這個循環:

for i in range(nrows): 
    for j in range(ncols): 
     if (i % 2 != 0): 
      grid[i][j] += 20*(j+1) 
     else: 
      grid[i][j] += 10*(j+1) 

的輸出:

[10, 20, 30, 40] 
[20, 40, 60, 80] 
[10, 20, 30, 40] 
[20, 40, 60, 80] 
+0

有趣的,正是我所期待的。 – user2909869

5

的輸出是如預期:下面的代碼行添加10給每個小區,並且由於每一個是在進入零,它成爲10在輸出

for i in range(nrows): 
    for j in range(ncols): 
     grid[i][j] += 10 

也許以下會做,這取決於你正在嘗試做

for i in range(nrows): 
    for j in range(ncols): 
     grid[i][j] += 10*(j+1) 

而對於雙迴路的版本(不是你給的輸出,但我沒有找到模式)

for i in range(nrows): 
    for j in range(ncols): 
     grid[i][j] += 10*(i+j+1) 
+1

歡迎SO,尼斯的答案! – aIKid

+0

@aIKid,謝謝你:-) –

0

您需要更改您的代碼:

for i in range(nrows): 
    val = 10 
    for j in range(ncols):    
     grid[i][j] = val 
     val += 10 
+0

或簡單'grid [i] [j] = 10 *(j + 1)' – Leonardo

0
def matrix(grid): 

nrows = len(grid) 
ncols = len(grid[0]) 
grid[0][0]=10; 
for i in range(nrows): 
    for j in range(ncols): 
if(j!=0) 
     grid[i][j] = grid[i][j-1]+10; 
else 
grid[i][j]=10; 

for row in grid: 
    print(row) 
1

每當你必須修改t他整個名單,試圖用理解來做到這一點。這是有效的。所以,你的問題可以用list comprehensions可以解決這樣的

rows = 4 
cols = 4 
grid = [[0] * cols for _ in range(rows)] 
print [[(i * 10) for i in xrange(1, len(row) + 1)] for row in grid] 

輸出

[[10, 20, 30, 40], [10, 20, 30, 40], [10, 20, 30, 40], [10, 20, 30, 40]]