Все значения в списке заменяются вновь добавленными значениями. В чем здесь ошибка? - PullRequest
0 голосов
/ 01 мая 2020
    x = []
    p = []
    n = int(input())
    for _ in range(n):
        cmd = input().split()
        if cmd[0] == "insert":
            x.insert(int(cmd[1]), int(cmd[2]))
        elif cmd[0] == "print":
            p.append(x)
        elif cmd[0] == "remove":
            x.remove(int(cmd[1]))
        elif cmd[0] == "append":
            x.append(int(cmd[1]))
        elif cmd[0] == "sort":
            x.sort()
        elif cmd[0] == "pop":
            x.pop()
        elif cmd[0] == "reverse":
            x.reverse()

    for i in p:
        print(i)

В python 3,7, для входа:

>     12
>     insert 0 5
>     insert 1 10
>     insert 0 6
>     print
>     remove 6
>     append 9
>     append 1
>     sort
>     print
>     pop
>     reverse
>     print

Предполагается дать вывод:

[6, 5, 10] [ 1, 5, 9, 10] [9, 5, 1] ​​

Но, это дает:

[9, 5, 1] ​​[9, 5, 1] ​​[ 9, 5, 1] ​​

Пожалуйста, найдите ошибку в коде

Ответы [ 2 ]

1 голос
/ 01 мая 2020

x - это ссылка на имя объекта list, который вы изменяете с помощью каждой команды. Он не перестает меняться только потому, что вы добавили его в p.

Вместо этого вы можете вставить копию из x в p, используя нарезку или list.copy:

elif cmd[0] == "print":
    p.append(x[:])
    # or use copy
    p.append(x.copy())
1 голос
/ 01 мая 2020

append не делает копию. Вам нужно что-то вроде

p.append(x[:])

, чтобы добавить «снимок» x в список.

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