Вставка элемента в указанную позицию списка: метод insert

Раздел: Основы Python -> Методы списков

Метод insert() для списков

Основной синтаксис:

list.insert(index, item)

Python list count (метод count для списков python)

Метод вставляет элемент item в список перед элементом с указанным индексом index. Если индекс больше длины списка, элемент добавляется в конец. Если индекс отрицательный, отсчет идет от конца списка.

my_list = [10, 20, 30]\nmy_list.insert(1, 15)\nprint(my_list)  # [10, 15, 20, 30]

Python list insert (метод insert для списков python)

Как вставить элемент в начало списка без потери данных?

Использование индекса 0:

lst = [2, 3, 4]\nlst.insert(0, 1)\nprint(lst)  # [1, 2, 3, 4]

Python list len (метод len для списка python)

Этот подход сдвигает все существующие элементы вправо.

Как вставить элемент в конец списка аналогично append?

Можно указать индекс равный длине списка или использовать len(list):

lst = [1, 2, 3]\nlst.insert(len(lst), 4)\nprint(lst)  # [1, 2, 3, 4]

метод list python (методы списков в python)

Также подойдет любой индекс больше или равный длине. Однако метод append() работает быстрее.

Как вставить несколько элементов с помощью insert?

Метод insert вставляет только один элемент. Для вставки нескольких используется цикл или срезы:

lst = [1, 5, 6]\nfor x in [2, 3, 4]:\n    lst.insert(1, x)\nprint(lst)  # [1, 4, 3, 2, 5, 6] - порядок обратный

Print count python (вывод count в python)

Чтобы сохранить порядок, вставлять с конца или использовать срез:

lst = [1, 5, 6]\nlst[1:1] = [2, 3, 4]\nprint(lst)  # [1, 2, 3, 4, 5, 6]

Как вставить элемент в отсортированный список, не нарушая порядок?

import bisect\nsorted_lst = [1, 3, 5, 7]\npos = bisect.bisect_left(sorted_lst, 4)\nsorted_lst.insert(pos, 4)\nprint(sorted_lst)  # [1, 3, 4, 5, 7]

Как заменить элемент через insert и pop?

lst = [10, 20, 30, 40]\nlst.pop(1)\nlst.insert(1, 25)\nprint(lst)  # [10, 25, 30, 40]

Однако проще использовать присваивание по индексу: lst[1] = 25, если не требуется смещать другие элементы.

Типичные ошибки при использовании insert:

  • Забыть про смещение индексов. После вставки все последующие индексы увеличиваются. Если вставлять в цикле по исходным индексам, результат будет неверным. Рекомендуется вставлять в обратном порядке или использовать срезы.
  • Попытка вставить, изменяя список во время итерации. Это приводит к пропуску элементов или бесконечному циклу. Лучше создать новый список или итерировать по копии.
  • Неправильный отрицательный индекс. Отрицательный индекс -1 указывает на последний элемент, вставка произойдет перед ним. Чтобы вставить после последнего, используйте len(lst).

Расширенные примеры использования insert

Пример 1: Вставка элементов из другого списка с сохранением порядка

Пример
main_list = [1, 10, 20, 30]\ninsert_list = [2, 3, 4]\n# Вставляем элементы по одному в обратном порядке для сохранения очередности\nfor i, item in enumerate(reversed(insert_list)):\n    main_list.insert(1, item)\nprint(main_list)  # [1, 2, 3, 4, 10, 20, 30]
[1, 2, 3, 4, 10, 20, 30]

Пример 2: Вставка по условию (отрицательные числа после каждого положительного)

Пример
nums = [5, -3, 8, -2, 0]\nresult = []\nfor num in nums:\n    result.append(num)\n    if num < 0:\n        result.insert(len(result)-1, 0)  # вставить 0 перед отрицательным\nprint(result)  # [5, 0, -3, 8, 0, -2, 0]
[5, 0, -3, 8, 0, -2, 0]

Пример 3: Сравнение производительности insert и срезов при массовой вставке

Пример
import timeit\nlst1 = [0]*10000\nlst2 = [0]*10000\ninsert_time = timeit.timeit('lst1.insert(5000, 1)', globals={'lst1':lst1}, number=1000)\nslice_time = timeit.timeit('lst2[5000:5000] = [1]', globals={'lst2':lst2}, number=1000)\nprint(f'insert: {insert_time:.5f}, slice: {slice_time:.5f}')

Срезы работают быстрее, особенно при единичной вставке, так как insert тратит время на смещение.

Пример 4: Вставка с использованием генератора для создания нового списка

Пример
lst = [1, 2, 3, 4, 5]\n# Вставляем 0 перед каждым четным числом\nnew_lst = []\nfor x in lst:\n    if x % 2 == 0:\n        new_lst.insert(len(new_lst), 0)  # или append\n    new_lst.insert(len(new_lst), x)\nprint(new_lst)  # [1, 0, 2, 3, 0, 4, 5]
[1, 0, 2, 3, 0, 4, 5]

Пример 5: Вставка в многомерные списки

Пример
matrix = [[1, 2], [3, 4]]\n# Вставить строку [0, 0] на первую позицию\nmatrix.insert(0, [0, 0])\nprint(matrix)  # [[0, 0], [1, 2], [3, 4]]\n# Вставить элемент во вторую строку (индексация) into matrix[1]\nmatrix[1].insert(1, 99)\nprint(matrix)  # [[0, 0], [1, 99, 2], [3, 4]]
[[0, 0], [1, 2], [3, 4]]\n[[0, 0], [1, 99, 2], [3, 4]]

Метод insert для списков Python - comments

En
Python list insert (python)