2013-11-21 2 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]] 
Смежные вопросы