Вставка элемента в указанную позицию списка: метод insert
Метод 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]]