У нас есть такое же поведение, см ниже:
поведения
по умолчанию для вставки элемента по данному индексу; каждое значение при большем индексе сдвигается на одну позицию до конца.
>>> my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> my_list.insert(5, 'item')
>>> my_list
['a', 'b', 'c', 'd', 'e', 'item', 'f', 'g']
>>> my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> my_list.insert(-3, 'item')
>>> my_list
['a', 'b', 'c', 'd', 'item', 'e', 'f', 'g']
Если список пуст, элемент прилагается в обычном порядке.
>>> my_list = []
>>> my_list.insert(5, 'item')
>>> my_list
['item']
>>> my_list = []
>>> my_list.insert(-3, 'item')
>>> my_list
['item']
Если индекс выходит за пределы границ, элемент добавляется в конец, если индекс является положительным или к началу, если отрицательный. Исключено исключение.
>>> my_list = ['a', 'b']
>>> my_list.insert(5, 'item')
>>> my_list
['a', 'b', 'item']
>>> my_list = ['a', 'b']
>>> my_list.insert(-3, 'item')
>>> my_list
['item', 'a', 'b']
Мы имеем точно такое же поведение с ломтиком нотации, в случае диапазона одних и тех же показателей:
>>> my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> my_list[5:5] = ['item']
>>> my_list
['a', 'b', 'c', 'd', 'e', 'item', 'f', 'g']
>>> my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> my_list[-3:-3] = ['item']
>>> my_list
['a', 'b', 'c', 'd', 'item', 'e', 'f', 'g']
>>> my_list = []
>>> my_list[5:5] = ['item']
>>> my_list
['item']
>>> my_list = []
>>> my_list[-3:-3] = ['item']
>>> my_list
['item']
>>> my_list = ['a', 'b']
>>> my_list[5:5] = ['item']
>>> my_list
['a', 'b', 'item']
>>> my_list = ['a', 'b']
>>> my_list[-3:-3] = ['item']
>>> my_list
['item', 'a', 'b']
Срез обозначения те же, как вызов __setitem__()
метод с slice
объекта:
>>> my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> my_list.__setitem__(slice(5, 5), ['item'])
>>> my_list
['a', 'b', 'c', 'd', 'e', 'item', 'f', 'g']
Я думаю, что они, вероятно, такие же, myList.insert просто выполняет myList [at: at] = [myValue] –
Нет, он перемешивает элементы вверх. Я не могу найти реализацию другого. https://svn.python.org/projects/python/trunk/Objects/listobject.c – steven35
Вы можете рассмотреть Github référence, теперь: https://github.com/python/cpython/blob/master/Objects/listobject.c –