Изменение элементов списка
Узнайте, как изменять элементы списка Python с помощью индексов, срезов, append(), insert(), extend() и списковых включений — с примерами.
Списки в Python являются изменяемыми, то есть вы можете менять их содержимое после создания. В этой главе рассматриваются все практические способы изменения элементов списка: прямое присваивание по индексу, замена с помощью срезов, append(), insert(), extend() и списковые включения. Понимание того, когда применять каждый из этих подходов, — ключ к написанию чистого и эффективного кода на Python.
Изменение одного элемента по индексу
Самый прямой способ изменить один элемент — присвоить новое значение его индексу. Индексы списка начинаются с 0.
fruits = ["apple", "banana", "cherry"]
fruits[1] = "mango"
print(fruits)Вывод:
['apple', 'mango', 'cherry']Отрицательная индексация ведёт счёт с конца списка. Индекс -1 соответствует последнему элементу, -2 — предпоследнему и так далее.
colors = ["red", "green", "blue"]
colors[-1] = "yellow"
print(colors)Вывод:
['red', 'green', 'yellow']Если вы попытаетесь присвоить значение несуществующему индексу, Python выбросит IndexError. Используйте шаблоны доступа к списку или len(), чтобы оставаться в допустимых пределах.
Замена диапазона элементов с помощью срезов
Присваивание через срез заменяет непрерывный участок списка другим списком. Срез my_list[start:end] выбирает элементы с индекса start до (но не включая) индекса end.
Вывод:
[1, 20, 30, 5]Обратите внимание, что замещающий список не обязан совпадать по длине со срезом. Здесь три элемента (2, 3, 4) были заменены двумя (20, 30), и список уменьшился на один элемент.
Также можно вставить элементы, не удаляя существующих, используя пустой срез:
letters = ["a", "b", "e"]
letters[2:2] = ["c", "d"]
print(letters)Вывод:
['a', 'b', 'c', 'd', 'e']append() — добавление одного элемента в конец
Метод append() добавляет один элемент в конец списка и изменяет список на месте. Он всегда добавляет ровно один элемент, даже если этот элемент сам является списком.
Вывод:
[1, 2, 3, 4, 5]Если добавить список как один элемент, он вложится, а не объединится:
my_list = [1, 2, 3]
my_list.append([4, 5])
print(my_list)Вывод:
[1, 2, 3, [4, 5]]Используйте extend(), если хотите объединить все элементы другого списка.
insert() — добавление одного элемента в заданную позицию
Метод insert() вставляет новый элемент по указанному индексу, сдвигая все последующие элементы на одну позицию вправо.
Вывод:
[1, 2, 99, 3, 4]insert() никогда не выбрасывает IndexError при выходе за пределы диапазона. Если передать индекс больше длины списка, элемент добавится в конец. Если передать отрицательный индекс за пределами начала, элемент добавится в начало.
extend() — добавление всех элементов из другого итерируемого объекта
Метод extend() добавляет каждый элемент из итерируемого объекта (списка, кортежа, строки и т. д.) в конец списка. Исходный список расширяется на месте.
Вывод:
[1, 2, 3, 4, 5, 6, 7]Сравнение extend() и append():
| Метод | Что добавляет | Результат для [1,2] + [3,4] |
|---|---|---|
append([3,4]) | Один элемент (вложенный список) | [1, 2, [3, 4]] |
extend([3,4]) | Каждый элемент по отдельности | [1, 2, 3, 4] |
Списковые включения — преобразование элементов в новый список
Списковые включения создают новый список, применяя выражение к каждому элементу (с необязательным фильтром). После создания включения переменная переприсваивается — исходный список не изменяется на месте.
Вывод:
[4, 8, 12]Также можно преобразовать каждый элемент без фильтрации:
prices = [10.0, 25.5, 8.75]
discounted = [round(p * 0.9, 2) for p in prices]
print(discounted)Вывод:
[9.0, 22.95, 7.88]Используйте списковые включения, когда нужно получить читаемую однострочную запись для создания изменённой копии списка.
Выбор подходящего метода
| Цель | Лучший метод |
|---|---|
| Изменить один элемент в известной позиции | Присваивание по индексу list[i] = value |
| Заменить диапазон элементов | Присваивание через срез list[a:b] = new_items |
| Добавить один элемент в конец | append() |
| Добавить один элемент в заданную позицию | insert(index, value) |
| Объединить все элементы из другого итерируемого объекта | extend() |
| Получить изменённую копию по правилу | Списковое включение |
Для удаления элементов из списка см. Удаление элементов списка. Для сортировки списка на месте см. Сортировка списков. Полный справочник всех методов списка см. в Методах списка.