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 переменную 🙂

  • Строка в списке, в функцию
  • Отображение вложенного списка с помощью List Comprehension в Python?
  • Основы рекурсии в Python
  • Python - печатать список строк CSV в выровненных столбцах
  • Сортировка списка классов по алфавиту на основе переменной в классе python 2.7
  • Преобразование строки в список слов?
  • Вывод всех возможных перестановок из нескольких списков
  • постоянно проверять список и делать что-либо, если в списке есть элементы
  • Python 2.7 - IPython «raw_input» и добавление к списку - добавляет «u» перед каждым элементом
  • Используйте python для циклического перехода по двум спискам, используя один в качестве индекса в список списков, а другой как значение для добавления
  • Как создать кортежи из одного списка с буквенно-числовыми символами?
  •  
    Interesting Posts for Van-Lav

    Python открывает CSV-файл с предположительно смешанными кодировками?

    Как подсчитать цифры, буквы, пробелы для строки в Python

    Загрузка и процесс загрузки файлов в бутылки

    Эквивалентная функция im2double в OpenCV Python

    Список добавления для многопроцессорности Python

    Как вы развертываете свое приложение WSGI? (и почему это лучший способ)

    TimeOutException при использовании link_text с явным ожиданием в selenium webdriver с python

    WrapSize и полоса прокрутки: виджеты, не нарисованные при запуске, не будут рисоваться позже

    подклассификация файловых объектов (для продолжения операций открытия и закрытия) в python 3

    Как завершить процесс с Python с помощью pid?

    Как сохранить request.form в db через wtforms или ошибку в sqlalchemy update?

    Python pandas integer YYYYMMDD для datetime

    Начало, конец и продолжительность максимального просадки в Python

    Файлы Pydev и * .pyc

    Как проверить модуль, который зависит от boto и службы Amazon AWS?

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