Insert: примеры (PYTHON)

Функция insert в языке Python: практическое применение
Раздел: Списки, Модификация коллекций
insert(index, object): None

Описание метода insert

Метод insert() представляет собой встроенный метод объектов типа list (список) в Python. Его основное назначение – вставка элемента в список на указанную позицию.

Метод применяется, когда необходимо добавить элемент не в конец списка (как это делает append()), а в его произвольное место. Это может быть полезно при работе с очередями с приоритетами, поддержании отсортированного порядка, вставке данных в определенную позицию структурированных записей.

Синтаксис и параметры

Синтаксис метода: list.insert(index, object)

  • index (целое число): Обязательный аргумент. Индекс позиции, на которую требуется вставить новый элемент. Элемент, ранее занимавший эту позицию, и все последующие элементы сдвигаются вправо.
  • object (любой тип данных): Обязательный аргумент. Элемент, который требуется вставить в список. Это может быть объект любого типа: число, строка, другой список, словарь и т.д.

Возвращаемое значение

Метод insert() изменяет исходный список in-place и не возвращает никакого значения (фактически возвращает None). Не следует пытаться присвоить результат его вызова переменной, ожидая получить измененный список.

Примеры использования метода insert

Базовые примеры работы с различными параметрами.

Вставка в начало списка:

my_list = [2, 3, 4]
my_list.insert(0, 1)
print(my_list)
[1, 2, 3, 4]

Вставка в середину списка:

my_list = ['a', 'c', 'd']
my_list.insert(1, 'b')
print(my_list)
['a', 'b', 'c', 'd']

Вставка в конец списка (аналогично append()):

my_list = [10, 20, 30]
my_list.insert(len(my_list), 40)
print(my_list)
[10, 20, 30, 40]

Вставка с отрицательным индексом:

my_list = ['x', 'y', 'z']
my_list.insert(-1, 'w')
print(my_list)
['x', 'y', 'w', 'z']

Вставка с индексом, превышающим длину списка:

my_list = [1, 2]
my_list.insert(10, 99)
print(my_list)
[1, 2, 99]

Похожие методы в Python

list.append(x): Добавляет элемент x в конец списка. Используется гораздо чаще, чем insert(), когда порядок добавления не важен или данные накапливаются последовательно. Эффективнее, так как не требует сдвига элементов.

list.extend(iterable): Расширяет список, добавляя в конец все элементы из итерируемого объекта. Предпочтительнее для объединения двух списков или добавления нескольких элементов за одну операцию.

Оператор +: Создает новый список как результат конкатенации двух других. Используется, когда исходные списки должны остаться неизменными. insert() и append() меняют исходный список.

Срезы (slicing): Позволяют выполнить сложные операции вставки или замены. Например, my_list[2:2] = [100, 200] вставит элементы 100 и 200 на позицию с индексом 2. Срезы - более универсальный, но менее интуитивно понятный для простой вставки одного элемента инструмент.

Выбор метода зависит от задачи: insert() оптимален для точечной вставки одного элемента в известную позицию.

Аналоги в других языках программирования

JavaScript: Использует метод splice() для модификации массива.

let arr = [1, 2, 4];
arr.splice(2, 0, 3); // Вставляет 3 на индекс 2
console.log(arr); // [1, 2, 3, 4]
[1, 2, 3, 4]

Java (ArrayList): Метод add(index, element).

import java.util.ArrayList;
ArrayList list = new ArrayList<>();
list.add(1); list.add(3);
list.add(1, 2); // Вставляет 2 на индекс 1
System.out.println(list); // [1, 2, 3]
[1, 2, 3]

PHP: Функция array_splice().

$arr = [10, 30];
array_splice($arr, 1, 0, 20);
print_r($arr);
Array ( [0] => 10 [1] => 20 [2] => 30 )

C# (List): Метод Insert(index, item).

using System.Collections.Generic;
var list = new List {5, 7};
list.Insert(1, 6);
// list = [5, 6, 7]
Список содержит: 5, 6, 7

Golang: Нет встроенного метода. Используется комбинация срезов.

package main
import "fmt"
func main() {
    s := []int{100, 200}
    s = append(s[:1], append([]int{150}, s[1:]...)...)
    fmt.Println(s) // [100 150 200]
}
[100 150 200]

Ключевое отличие Python - простота синтаксиса и то, что insert() является методом самого объекта списка, а не отдельной функцией.

Типичные ошибки

1. Попытка присвоить результат метода. Метод возвращает None.

my_list = [1, 2, 3]
new_list = my_list.insert(1, 99)
print(new_list)
print(my_list)
None
[1, 99, 2, 3]

2. Использование нецелочисленного индекса. Приведет к ошибке TypeError.

my_list = [1, 2, 3]
my_list.insert(1.5, 'x')
TypeError: 'float' object cannot be interpreted as an integer

3. Неправильная работа с индексами при итерации и одновременной модификации списка. Это может привести к неожиданному поведению, так как индексы элементов сдвигаются.

numbers = [1, 2, 3, 4]
for i, num in enumerate(numbers):
    if num == 2:
        numbers.insert(i, 0)
print(numbers) # Вставка меняет порядок итерации
[1, 0, 2, 3, 4]

4. Вставка самого списка в себя. Создает рекурсивную структуру.

a = [1, 2]
a.insert(0, a)
print(a)
print(a[0] is a)
[[...], 1, 2]
True

Изменения в последних версиях Python

Метод list.insert() является стабильным базовым методом с момента появления типа list. Его сигнатура и поведение не менялись на протяжении всех основных версий Python 3.x и Python 2.x. Это гарантирует обратную совместимость кода, использующего эту операцию.

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

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

Пример python
data = [5, 10, 15, 25]
new_values = [12, 20]
for value in new_values:
    for i in range(len(data)):
        if data[i] > value:
            data.insert(i, value)
            break
    else:
        data.append(value)
print(data)
[5, 10, 12, 15, 20, 25]

Реализация простой очереди с приоритетом (наивный вариант):

Пример python
tasks = []
def add_task(priority, name):
    for i, (p, _) in enumerate(tasks):
        if p > priority:
            tasks.insert(i, (priority, name))
            return
    tasks.append((priority, name))

add_task(2, 'Проверить почту')
add_task(1, 'Срочный звонок')
add_task(2, 'Написать отчет')
print(tasks)
[(1, 'Срочный звонок'), (2, 'Проверить почту'), (2, 'Написать отчет')]

Использование insert() для создания списка в обратном порядке неэффективно, но демонстративно:

Пример python
original = [1, 2, 3, 4]
reversed_list = []
for item in original:
    reversed_list.insert(0, item)
print(reversed_list)
[4, 3, 2, 1]

Вставка элемента в список кортежей с сохранением сортировки по первому элементу:

Пример python
records = [('a', 1), ('c', 3), ('d', 4)]
new_record = ('b', 2)
index = next((i for i, (key, _) in enumerate(records) if key > new_record[0]), len(records))
records.insert(index, new_record)
print(records)
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

Комбинирование insert() и pop() для перемещения элемента внутри списка:

Пример python
items = ['a', 'b', 'c', 'd']
# Переместить элемент 'c' на позицию 1
item = items.pop(2)
items.insert(1, item)
print(items)
['a', 'c', 'b', 'd']

питон insert function comments

En
Insert Insert element at index