Python - добавить список в список - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь решить проблему со списками. Для вывода я хочу добавить все списки в один окончательный список (ans).

Но когда я добавляю второй список, первый список становится равным второму. Я не могу понять, почему это происходит.

ls = list()     
ans = []
n = int(input())

for _ in range(n):

    cmd = input()
    if cmd == "insert":
        i, e = map(int, input().split())
        ls.insert(i, e)
    elif cmd == "print":
        ans.append(ls)

    elif cmd == "remove":
        e = int(input())
        ls.remove(e)
    elif cmd =="append":
        e = int(input())
        ls.append(e)
    elif cmd == "sort":
        ls.sort()
    elif cmd == "pop":
        ls.pop()
    elif cmd == "reverse":
        ls.reverse()
    else:
        print("invalid input") 


print(ans)      

Ввод:

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

1 Ответ

1 голос
/ 27 марта 2020

Когда вы добавляете список в список, т.е. ans.append(ls), вы фактически передаете его по ссылке. Поэтому, когда вы добавляете ls 3 раза в ans, он добавляет ту же ссылку, что и ls.

Если вы не хотите добавлять по ссылке, вы должны предоставить копию списка. А в более сложном списке вы, вероятно, должны сделать глубокое копирование.

Вот, чтобы добавить копию:

ans.append(ls.copy())

Надеюсь, это поможет!

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