Проблема в вашем коде связана с мелкими и глубокими копиями . Когда ваш код назначен посещенным, выполните:
visited = [[False] * len(maze[0])] * len(maze)
Что он действительно делает, это сначала создает список False (и это нормально, так как False является типом значения), но затем создает сценарии для двух копий списка,Списки являются объектами, поэтому результатом является список с двумя ссылками на один и тот же список False. Затем, когда вы изменили первый внутренний список, он также изменил значения второго списка, так как оба были одинаковыми.
Исправление для этого заключается в изменении конструкции посещения с использованием понимания списка для создания двух копийвнутренний список:
visited = [[False] * len(maze[0]) for n in range(len(maze))]
Тогда полный код будет:
def start_matrix(maze):
visited = [[False] * len(maze[0]) for n in range(len(maze))]
print(visited)
for i in maze:
for k in i:
if k == '=' or k == '|':
print(maze.index(i), i.index(k))
print(visited[maze.index(i)][i.index(k)])
visited[maze.index(i)][i.index(k)] = True
print(visited)
return None
map1 = [['=', ' ', '|'], [' ', ' ', ' ']]
start_matrix(map1)
с выводом:
[[False, False, False], [False, False, False]]
0 0
False
[[True, False, False], [False, False, False]]
0 2
False
[[True, False, True], [False, False, False]]
Надеюсь, все ясно. Если нет, пожалуйста, дайте мне знать, и я расширю.