почему добавление в python не работает должным образом?

#python #list

#python #Список

Вопрос:

 def get_next_state_for_x(list, next_state):
    final = []
    state = list
    for g in range (len(next_state)):
        temp = state[g]
        state[g] = next_state[g]
        print(state)
        final.append(state)
        state[g] = int(temp)
    print(final)
get_next_state_for_x([0, 0, 0, 0], [1, 1, 1, 1])
 

итак, пока я компилирую этот код, я получаю вывод:

 [1, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 1, 0]
[0, 0, 0, 1]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
 

вместо (для последней строки)

 [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]
 

почему final.append(state) добавляет неправильный список к результату?

Комментарии:

1. state один и тот же список каждый раз в цикле.

2. Кстати, не используйте list в качестве имени переменной, оно затеняет встроенный класс / функцию.

3. Используйте final.append(state.copy())

4. Хорошо, я попробую

5. большое спасибо, это сработало

Ответ №1:

Вы связываете список, поэтому он меняется каждый раз. Вы должны скопировать его

Исправьте на:

 final.append(state.copy())
 

Итак:

 def get_next_state_for_x(list, next_state):
    final = []
    state = list
    for g in range (len(next_state)):
        temp = state[g]
        state[g] = next_state[g]
        print(state)
        final.append(state.copy())
        state[g] = int(temp)
    print(final)
get_next_state_for_x([0, 0, 0, 0], [1, 1, 1, 1])
 

Вывод:

 [1, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 1, 0]
[0, 0, 0, 1]
[[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]