W3docs

Методы списков

Все 11 методов списков Python: append, extend, insert, remove, pop, index, count, sort, reverse, copy и clear — с примерами и подводными камнями.

Списки Python — это изменяемые упорядоченные последовательности. Благодаря изменяемости тип списка содержит одиннадцать встроенных методов, которые позволяют добавлять, удалять, искать и переупорядочивать элементы на месте — без каких-либо импортов. Эта страница охватывает каждый метод с запускаемыми примерами, типичными ловушками и рекомендациями по выбору подходящего метода.

Связанные главы: Списки Python · Сортировка списков · Генераторы списков · Копирование списков

Краткий справочник

МетодЧто делаетИзменяет список?Возвращает
append(x)Добавляет один элемент в конецДаNone
extend(iterable)Добавляет все элементы итерируемого объекта в конецДаNone
insert(i, x)Вставляет один элемент на позицию iДаNone
remove(x)Удаляет первое вхождение xДаNone
pop([i])Удаляет и возвращает элемент по индексу i (по умолчанию: последний)ДаУдалённый элемент
index(x[, start[, end]])Возвращает индекс первого вхождения xНетint
count(x)Подсчитывает вхождения xНетint
sort([key][, reverse])Сортирует элементы на местеДаNone
reverse()Разворачивает элементы на местеДаNone
copy()Возвращает поверхностную копиюНетНовый список
clear()Удаляет все элементыДаNone

Добавление элементов

append()

append(x) добавляет единственный элемент x в конец списка. Это амортизированная операция O(1) и идиоматический способ строить список по одному элементу за раз.

python— editable, runs on the server

append() всегда добавляет аргумент как один элемент, даже если этот аргумент сам является списком:

fruits = ["banana", "orange"]
fruits.append(["apple", "mango"])
print(fruits)  # ['banana', 'orange', ['apple', 'mango']]
print(len(fruits))  # 3 — the nested list counts as one element

Чтобы вместо этого объединить все элементы из другого списка, используйте extend().

extend()

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

python— editable, runs on the server

extend() эквивалентен выражению fruits += more_fruits. Используйте его, когда у вас уже есть коллекция элементов для объединения; используйте append() для одного элемента.

insert()

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

python— editable, runs on the server
  • insert(0, x) добавляет элемент в начало (но это операция O(n), так как все элементы сдвигаются).
  • Если i больше или равно длине списка, элемент добавляется в конец — ошибки не возникает.

Удаление элементов

remove()

remove(x) сканирует список слева направо и удаляет первый элемент, равный x. Если x не найден, возбуждается исключение ValueError.

python— editable, runs on the server

Защита от ValueError:

fruits = ["banana", "orange"]
item = "mango"
if item in fruits:
    fruits.remove(item)
else:
    print(f"{item} not in list")
# mango not in list

pop()

pop(i) удаляет элемент по индексу i и возвращает его. Возвращаемое значение — ключевое отличие от remove().

python— editable, runs on the server

pop(), вызванный без аргументов, удаляет и возвращает последний элемент — типичный паттерн стека:

stack = ["a", "b", "c"]
last = stack.pop()
print(stack)  # ['a', 'b']
print(last)   # c

clear()

clear() удаляет каждый элемент из списка, оставляя его пустым. Это эквивалентно del lst[:], но более читаемо.

fruits = ["banana", "apple", "orange"]
fruits.clear()
print(fruits)  # []

Используйте clear(), когда хотите очистить список, на который могут ссылаться другие переменные — fruits = [] лишь перепривяжет имя, тогда как clear() опустошит базовый объект.

Поиск элементов

index()

index(x) возвращает целочисленный индекс первого вхождения x. Принимает необязательные аргументы start и end для ограничения поиска срезом.

python— editable, runs on the server

Поиск в заданном диапазоне:

items = ["a", "b", "c", "b", "d"]
print(items.index("b"))       # 1  — first occurrence
print(items.index("b", 2))    # 3  — first occurrence at index >= 2

index() возбуждает ValueError, если элемент отсутствует. Используйте in для предварительной проверки, когда отсутствие элемента возможно:

if "mango" in fruits:
    pos = fruits.index("mango")

count()

count(x) возвращает количество раз, которое x встречается в списке.

python— editable, runs on the server

В отличие от index(), метод count() никогда не возбуждает ошибку для отсутствующего значения — он возвращает 0.

Упорядочивание элементов

sort()

sort() сортирует список на месте в порядке возрастания по умолчанию. Принимает два необязательных именованных аргумента:

  • reverse=True — сортировка по убыванию.
  • key=<callable> — функция, применяемая к каждому элементу перед сравнением.
python— editable, runs on the server

Сортировка по убыванию:

numbers = [3, 1, 4, 1, 5]
numbers.sort(reverse=True)
print(numbers)  # [5, 4, 3, 1, 1]

Сортировка строк без учёта регистра с помощью key:

words = ["banana", "Apple", "cherry", "date"]
words.sort(key=str.lower)
print(words)  # ['Apple', 'banana', 'cherry', 'date']

sort() изменяет список и возвращает None. Если нужна отсортированная копия без изменения оригинала, используйте встроенную функцию sorted():

original = [3, 1, 4]
result = sorted(original)
print(original)  # [3, 1, 4]  — unchanged
print(result)    # [1, 3, 4]

Смотрите Сортировку списков для подробного руководства, включая пользовательские компараторы и сортировку объектов.

reverse()

reverse() разворачивает список на месте. Как и sort(), возвращает None.

python— editable, runs on the server

Чтобы получить перевёрнутую копию без изменения оригинала, используйте reversed() (возвращает итератор) или срезы:

fruits = ["banana", "apple", "orange"]
print(list(reversed(fruits)))  # ['orange', 'apple', 'banana']
print(fruits[::-1])            # ['orange', 'apple', 'banana']
print(fruits)                  # ['banana', 'apple', 'orange']  — unchanged

Копирование

copy()

copy() возвращает поверхностную копию списка — новый объект списка, содержащий те же ссылки на элементы.

original = ["banana", "apple", "orange"]
clone = original.copy()
clone.append("mango")

print(original)  # ['banana', 'apple', 'orange']  — unchanged
print(clone)     # ['banana', 'apple', 'orange', 'mango']

«Поверхностная» означает, что вложенные объекты (например, список внутри списка) не дублируются — и оригинал, и копия будут отражать изменения в этих вложенных объектах. Для полностью независимого дубликата используйте copy.deepcopy() из стандартной библиотеки. Смотрите Копирование списков для подробного объяснения поверхностных и глубоких копий.

Типичные ловушки

Все изменяющие методы возвращают None. Распространённая ошибка — присваивать результат sort(), reverse(), append() и т. д.:

# Wrong — result is None, not a sorted list
numbers = [3, 1, 2]
numbers = numbers.sort()
print(numbers)  # None
# Correct — sort() mutates in place
numbers = [3, 1, 2]
numbers.sort()
print(numbers)  # [1, 2, 3]

remove() и index() возбуждают ValueError для отсутствующих элементов. Всегда проверяйте через in сначала или перехватывайте исключение, когда элемент может отсутствовать.

append() vs extend() для списков. Использование append(another_list) вкладывает список как один элемент; extend(another_list) объединяет его элементы.

Практика

Практика
Which Python list method removes every element from the list and returns None?
Which Python list method removes every element from the list and returns None?
Was this page helpful?