2016-08-18 1 views
0

У меня есть простой код для тестирования, мой код должен писать только матрицу в (1,1) и (2,2), эти две ячейки.python записывает ячейку в матрицу неправильным образом

grid = [ 
[1,1,1,2,], 
[1,9,1,2,], 
[1,8,9,2,], 
[1,2,3,4,] 
] 

n = 4 
duplicate = [[0]*n]*n 

for i in range(1,n-1): 
    for j in range(1,n-1): 
     cur = grid[i][j] 
     if (cur > grid[i-1][j]) and (cur > grid[i][j-1]) and (cur > grid[i+1][j]) and (cur > grid[i][j+1]): 
      print(i,j) 
      duplicate[i][j]="X" 


print(duplicate) 

Мой выход:

1 1 
2 2 
[[0, 'X', 'X', 0], [0, 'X', 'X', 0], [0, 'X', 'X', 0], [0, 'X', 'X', 0]] 

Однако, выход должен быть таким:

1 1 
2 2 
[[0, 0, 0, 0], [0, 'X', 0, 0], [0, 0, 'X', 0], [0, 0, 0, 0]] 

Что случилось с моим кодом? Спасибо большое!

ответ

1

Обычная ошибка: [[0]*n]*n создает список n ссылки на этот же список [0]*n. Вам нужно сделать это, чтобы создать n разные списки: [[0]*n for _ in range(n)], чтобы вы могли обновлять каждую из них самостоятельно.

+0

Он работает , Большое спасибо! Я боролся с этим в течение получаса. Ты спас меня. – OregonDuck

0

список вашего создать использование [[0] * п] * п то же самое, Вы можете доказать

duplicate = [[0]*4]*4 
duplicate[1][1] = 1 

Вы можете понять больше взглядом на эту проблему

def extendList(val, list=[]): 
    list.append(val) 
    return list 

list1 = extendList(10) 
list2 = extendList(123,[]) 
list3 = extendList('a') 

print "list1 = %s" % list1 
print "list2 = %s" % list2 
print "list3 = %s" % list3 

list1 = [10, 'a'] 
list2 = [123] 
list3 = [10, 'a'] 
+0

Привет, Эйсон, ваша программа заставляет меня запутываться. 'code' list1 = extendList (10), почему вы даете только один параметр, у него должно быть два? Кроме того, мы не вводим 'a' в список1, но почему мы получаем list1 = [10, 'a']? Это интересно. Большое вам спасибо за ваш ответ. – OregonDuck

+0

вы можете использовать id (list1), чтобы проверить адрес списка. вы можете посмотреть, как реализовать список python http://www.laurentluce.com/posts/python-list-implementation/ – Windsooon

Смежные вопросы