List.append () изменение всех элементов в добавленный элемент

У меня, похоже, проблема с моей программой создания лабиринтов, созданной на Python. Я пытаюсь случайным образом создать путь, который разветвляется в выбранных точках, причем точки получаются, когда они идут. Когда лабиринт доходит до тупика, он будет сортировать по посещаемым точкам, проверяя верхнее значение, чем выскакивая его, и переходите к следующему, пока он не достигнет места, где он не является тупиком. Однако, когда я пытаюсь добавить элементы в список, который я использую, чтобы сохранить пробелы, в которых я был, что-то странное происходит, я никогда не видел его раньше. Вот код, и лучший способ увидеть его – запустить его через раз, пока он не пройдет весь путь. Я действительно не нашел способ противостоять проблеме тупика, поэтому, если бы кто-нибудь мог помочь мне в этом, это было бы здорово.

import random width = 8 def check(x,y): """Figures out the directions that Gen can move while""" if x-1 == -1: maze[x][y][3] = 0 if x+1 == 8: maze[x][y][1] = 0 if y+1 == 8: maze[x][y][2] = 0 if y-1 == -1: maze[x][y][0] = 0 if x + 1 in range(0,8) and visited[x+1][y] == False: maze[x][y][1] = 2 if x - 1 in range(0,8) and visited[x-1][y] == False: maze[x][y][3] = 2 if y + 1 in range(0,8) and visited[x][y+1] == False: maze[x][y][2] = 2 if y - 1 in range(0,8) and visited[x][y-1] == False: maze[x][y][0] = 2 def Gen(x,y): visited[x][y] = True past.append(current) dirs = [] check(x,y) print current if maze[x][y][0] == 2: dirs.append(0) if maze[x][y][1] == 2: dirs.append(1) if maze[x][y][2] == 2: dirs.append(2) if maze[x][y][3] == 2: dirs.append(3) pos = random.choice(dirs) print dirs maze[x][y][pos] = 1 if pos == 0: current[1] -= 1 if pos == 1: current[0] += 1 if pos == 2: current[1] += 1 if pos == 3: current[0] -= 1 if maze[x][y][0] == 4: maze[x][y][0] = 1 if maze[x][y][1] == 4: maze[x][y][1] = 1 if maze[x][y][2] == 4: maze[x][y][2] = 1 if maze[x][y][3] == 4: maze[x][y][3] = 1 print maze[x][y] print past, '\n' #Build the initial values for the maze to be replaced later maze = [] current = [0,0] visited = [] past = [] #Generate empty 2d list with a value for each of the xy coordinates for i in range(0,width): maze.append([]) for q in range(0, width): maze[i].append([]) for n in range(0, 4): maze[i][q].append(4) #Makes a list of falses for all the non visited places for x in range(0, width): visited.append([]) for y in range(0, width): visited[x].append(False) #Generates the walls #for q in range(0, width): # for i in range(0, width): # check(q, i) current = [0,0] while current != [7,7]: Gen(current[0], current[1]) print maze 

Как вы можете видеть, оно начинается с 0,0, а затем вычисляет возможные пути. Он случайным образом выбирает из них и устанавливает значение для этой стороны комнаты в 0,0-1, что означает прохождение. 2 означает, что стена и 0 означают вне границ. 4 является просто заполнителем, поскольку все значения должны быть заполнены к тому времени, когда лабиринт полностью сгенерирован.

Если бы кто-нибудь мог мне помочь, это было бы здорово и очень ценится. Заранее спасибо.

One Solution collect form web for “List.append () изменение всех элементов в добавленный элемент”

Я считаю, что current список просто копируется несколько раз в past . Таким образом, у вас есть несколько копий одного и того же списка.

past.append(current) : в строке past.append(current) (две строки ниже def Gen(x,y): past.append(current[:]) , измените его на past.append(current[:]) .

Список нот list[:] создает копию списка. Технически вы создаете фрагмент всего списка.

Кстати, лучшим решением было бы не использовать глобальную current переменную 🙂

  • Python объединяет два списка неравной длины чередующимся образом
  • Функция трансформирования / распаковки (инверсия zip)?
  • Python 3- Назначить оценку
  • В Python, как мне удалить элемент списка Nth из списка списков (удаление столбцов)?
  • Python: преобразование списка словарей в json
  • Как сделать список из raw_input в python?
  • Как получить всю комбинацию n двоичного значения?
  • Преобразование вложенных списков данных в многомерные массивы Numpy
  •  
    Interesting Posts for Van-Lav

    найти максимум за столбец значений, которые приходят до минимума

    Потоковое соединение с использованием Python Bottle, Multiprocessing и gevent

    Как я могу рассчитать дисперсию списка в python?

    Как добавить визуальные аннотации к изображению с помощью python в ноутбуке jupyter?

    Прочитать текстовый файл в словаре, удаляя заголовок / завершающие символы новой строки

    переводить url с помощью google translate из скрипта python

    Python re.finditer match.groups () не содержит всех групп из соответствия

    Pandas выбирает строки, если ID появляется несколько раз

    Использование функций Python в Tkinter.Tcl ()

    Преобразование каждого сгруппированного столбца в объект DataFrameGroupBy в список

    Как запустить django TestCase вручную / против другой базы данных?

    Не удалось запустить scons, получив ошибку импорта

    Tkinter; Toplevel в новом классе

    Добавить новый столбец в файл csv и манипулировать по записям

    Удалите соседние повторяющиеся элементы из списка

    Python - лучший язык программирования в мире.