(Python) Добавление элементов в список с помощью l oop, добавление в этот список фактического состояния элемента обработки после каждой итерации - PullRequest
0 голосов
/ 27 марта 2020

Здравствуйте, я борюсь с одним ката на Codewars. Моя идея заключается в создании списка координат на основе списка направлений (СЕВЕР, ЮГ ...), но здесь есть проблема. Я собираюсь использовать l oop while, чтобы проверить каждое направление и одновременно добавить созданные координаты в список t. Но я удивлен, потому что мой l oop не добавляет координаты к t сразу после создания, но добавляет окончательный результат всех итераций l oop. Не могли бы вы объяснить мне, как это работает и как я могу добавить результат определенного повторения l oop в список t?

def dirReduc(arr):
    t=[[0,0]]

    a=[0,0]
    b=0
    while b<len(arr):

         if arr[b]=='NORTH':
            print(b)

            a[0]=a[0]+1
            print(a)
            t.append(a)

        b=b+1
    print(t)



print(dirReduc(["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]))
# I wish to modify this to [[0,0],[1,0],[0,0],[-1,0],[-1,1],[-1,0],[0,0],[0,-1]]
# if 'North' [a+1,b], if 'South' [a-1,b],if 'West' [a,b-1],if 'East' [a,b+1]
Run:
0
[1, 0]
5
[2, 0]
[[0, 0], [2, 0], [2, 0]] #here i suspect:[[0, 0], [1, 0], [2, 0]]
None

1 Ответ

0 голосов
/ 27 марта 2020

Когда вы добавляете a в список, вы добавляете ссылку (см. Здесь) , а не «моментальный снимок во времени», который, по вашему мнению, вы получаете. Вместо этого вам нужно использовать copy():

t.append(a.copy())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...