Форум сайта python.su
0
Привет! Подскажите в чем проблема с numpy массивом, список например заполняется:
import numpy as np r = np.array([[1,1],[1,1],[1,1]]) w = 2 h = 3 mask = [[False] * w] * h dx = [1,0,1,0,1,-1,1,-1] dy = [0,1,0,-1,1,1,-1,-1] def dfs(x,y): mask[x][y] = True r[x][y] = 42 res = 0 for j in range(len(dx)): nx = x + dx[j] ny = y + dy[j] if 0 <= nx < h and 0 <= ny < w and mask[nx][ny] == False: # and opening[nx][ny] == 255 res += dfs(nx,ny) + 1 return res print r,mask dfs(0,0) print r,mask [[1 1] [1 1] [1 1]] [[False, False], [False, False], [False, False]] [[42 42] [ 1 1] [ 1 1]] [[True, True], [True, True], [True, True]]
Отредактировано Pyuoo (Март 13, 2015 09:52:36)
Офлайн
857
PyuooЭто распространённая новичковая ошибка.mask = [[False] * w] * h
>>> lst = [[False] * 2] * 3 >>> lst [[False, False], [False, False], [False, False]] >>> lst[0][0] = 1 >>> lst [[1, False], [1, False], [1, False]] >>>
Офлайн
0
py.user.nextПонял, большое спасибо, то есть вся проблема в том, что эти ячейки ссылались на один объект
mask = [[False for i in range(2)] for j in range(3)]
Отредактировано Pyuoo (Март 13, 2015 09:51:06)
Офлайн
857
Pyuoo
А как создавать списки списков из разных объектов?
>>> lst = [[False] * 2 for _ in range(3)] >>> lst [[False, False], [False, False], [False, False]] >>> lst[0][0] = 1 >>> lst [[1, False], [False, False], [False, False]] >>>
Офлайн