Почему функция вставки дает такой результат?

#python-3.x

Вопрос:

 my_list = [1, 2]

for v in range(2):
    my_list.insert(-1, my_list[v])
    
print(my_list)
 

Результат указывает 1, 1, 1, 2. Почему результат не 1, 1, 2, 2, так как v в цикле for будет 0 = 1 и 1 = 2?

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

1. Вторая вставка происходит после того, как вы уже вставили элемент в список, переместив 2 в более поздний индекс. Попробуйте распечатать состояние списка на каждой итерации, и это будет ясно. См.также, как отлаживать небольшие программы .

2. pythontutor.com/…

Ответ №1:

list.insert(index, val) определяет индекс элемента, перед которым необходимо вставить. Поэтому на первой итерации вы вставляете значение между 1 и 2. Ваш новый список выглядит так [1,1,2] . На следующей итерации вы работаете с измененным списком, таким образом, вы используете только что вставленный 1, который находится v=1 сейчас. Таким образом, ваш список выглядит следующим образом

 [1,1,1,2]
 ^ 1 2 ^
 

Здесь ^ — исходные значения, а 1 и 2-итерации, в которых добавляются значения.