W3docs

Изменение элементов списка

Узнайте, как изменять элементы списка 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.

python— editable, runs on the server

Вывод:

[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() добавляет один элемент в конец списка и изменяет список на месте. Он всегда добавляет ровно один элемент, даже если этот элемент сам является списком.

python— editable, runs on the server

Вывод:

[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() вставляет новый элемент по указанному индексу, сдвигая все последующие элементы на одну позицию вправо.

python— editable, runs on the server

Вывод:

[1, 2, 99, 3, 4]

insert() никогда не выбрасывает IndexError при выходе за пределы диапазона. Если передать индекс больше длины списка, элемент добавится в конец. Если передать отрицательный индекс за пределами начала, элемент добавится в начало.

extend() — добавление всех элементов из другого итерируемого объекта

Метод extend() добавляет каждый элемент из итерируемого объекта (списка, кортежа, строки и т. д.) в конец списка. Исходный список расширяется на месте.

python— editable, runs on the server

Вывод:

[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]

Списковые включения — преобразование элементов в новый список

Списковые включения создают новый список, применяя выражение к каждому элементу (с необязательным фильтром). После создания включения переменная переприсваивается — исходный список не изменяется на месте.

python— editable, runs on the server

Вывод:

[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()
Получить изменённую копию по правилуСписковое включение

Для удаления элементов из списка см. Удаление элементов списка. Для сортировки списка на месте см. Сортировка списков. Полный справочник всех методов списка см. в Методах списка.

Практика

Практика
In Python, how can we change items in a list?
In Python, how can we change items in a list?
Was this page helpful?