#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]]