Функция Python list.append неожиданно изменяет предыдущего добавленного члена - PullRequest
0 голосов
/ 12 сентября 2018

У меня проблема с питоном, как показано ниже:

  • У меня есть 2 начальных списка:

first_list = [['a1', 'a2'], ['a1', 'a2']]

second_list = ['b1', 'b2']

  • Я хочу заменить "b2" в second_list на каждое значение из другого списка, а затем добавить его в first_list. Например:

части = ['C', 'D']

Мой ожидаемый результат для first_list будет: [['a1', 'a2'], ['a1', 'a2'], ['b1', 'C'], ['b1', 'D' ]]

Вот мой код:

first_list = [['a1','a2'], ['a1','a2']]
second_list = ['b1','b2']

parts = ['C', 'D']

for record in parts:
    print record    #print to see which value we will use to replace "b2"
    temp = second_list
    temp[1] = record
    print temp      #print to see which value will be appended to first_list
    first_list.append(temp)
    print first_list     #print first_list after adding a new member

И результат:

C
['b1', 'C']
[['a1', 'a2'], ['a1', 'a2'], ['b1', 'C']]
D
['b1', 'D']
[['a1', 'a2'], ['a1', 'a2'], ['b1', 'D'], ['b1', 'D']]

Я подозреваю, что что-то не так, но не могу это объяснить. Замена «append» на «insert» по-прежнему показывает ту же проблему. Может ли кто-нибудь мне помочь?

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Каждый раз, когда вы просто обновляете один и тот же список (temp).
Чтобы получить ожидаемое поведение, все, что вам нужно сделать, это сохранить новую копию списка.

for record in parts:
    print record    #print to see which value we will use to replace "b2"
    temp = second_list[:]  #make a new copy
    temp[1] = record
    print temp      #print to see which value will be appended to first_list
    first_list.append(temp)
    print first_list     #print first_list after adding a new member
0 голосов
/ 12 сентября 2018

дело в том, что на этом шаге вы копируете просто ссылку temp = second_list

, поэтому temp на самом деле то же самое, что и second_list

, вы должны скопировать значения, которыевы можете сделать, например, вот так temp = second_list[:], он создаст новый список, и он должен работать

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