Я наткнулся на следующий код (вроде):
my_list = [1, [2, 3, 4], 5]
my_list[1:2] = my_list[1]
После запуска этих двух строк переменная my_list
будет [1, 2, 3, 4, 5]
. Довольно полезно для расширения вложенных списков.
Но почему он действительно делает то, что он делает?
Я бы предположил, что оператор my_list[1:2] = my_list[1]
выполнил одно из следующих действий:
- просто поместите
[2, 3, 4]
во вторую позицию в списке (где он уже есть) - выдает некоторую ошибку "слишком много значений для распаковки", пытаясь поместить три значения (а именно 2,3,4) в контейнер длиной 1 (а именно
my_list[1:2]
). (Повторение выше с помощью массива Numpy вместо списка приводит к аналогичной ошибке.)
Другие вопросы (например, Как присваивание работает с фрагментом списка python), как правило, не обращают большого внимания на несоответствие между размером среза, который нужно заменить, и размер элементов, которые вы заменяете. (Не говоря уже о том, почему он работает так, как он это делает.)