Методы списков
Все 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) и идиоматический способ строить список по одному элементу за раз.
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) добавляет каждый элемент из переданного итерируемого объекта в конец списка. Итерируемым может быть список, кортеж, множество, строка или любой другой итерируемый объект.
extend() эквивалентен выражению fruits += more_fruits. Используйте его, когда у вас уже есть коллекция элементов для объединения; используйте append() для одного элемента.
insert()
insert(i, x) вставляет элемент x перед позицией i. Все существующие элементы с индекса i и далее сдвигаются на одну позицию вправо.
insert(0, x)добавляет элемент в начало (но это операция O(n), так как все элементы сдвигаются).- Если
iбольше или равно длине списка, элемент добавляется в конец — ошибки не возникает.
Удаление элементов
remove()
remove(x) сканирует список слева направо и удаляет первый элемент, равный x. Если x не найден, возбуждается исключение ValueError.
Защита от ValueError:
fruits = ["banana", "orange"]
item = "mango"
if item in fruits:
fruits.remove(item)
else:
print(f"{item} not in list")
# mango not in listpop()
pop(i) удаляет элемент по индексу i и возвращает его. Возвращаемое значение — ключевое отличие от remove().
pop(), вызванный без аргументов, удаляет и возвращает последний элемент — типичный паттерн стека:
stack = ["a", "b", "c"]
last = stack.pop()
print(stack) # ['a', 'b']
print(last) # cclear()
clear() удаляет каждый элемент из списка, оставляя его пустым. Это эквивалентно del lst[:], но более читаемо.
fruits = ["banana", "apple", "orange"]
fruits.clear()
print(fruits) # []Используйте clear(), когда хотите очистить список, на который могут ссылаться другие переменные — fruits = [] лишь перепривяжет имя, тогда как clear() опустошит базовый объект.
Поиск элементов
index()
index(x) возвращает целочисленный индекс первого вхождения x. Принимает необязательные аргументы start и end для ограничения поиска срезом.
Поиск в заданном диапазоне:
items = ["a", "b", "c", "b", "d"]
print(items.index("b")) # 1 — first occurrence
print(items.index("b", 2)) # 3 — first occurrence at index >= 2index() возбуждает ValueError, если элемент отсутствует. Используйте in для предварительной проверки, когда отсутствие элемента возможно:
if "mango" in fruits:
pos = fruits.index("mango")count()
count(x) возвращает количество раз, которое x встречается в списке.
В отличие от index(), метод count() никогда не возбуждает ошибку для отсутствующего значения — он возвращает 0.
Упорядочивание элементов
sort()
sort() сортирует список на месте в порядке возрастания по умолчанию. Принимает два необязательных именованных аргумента:
reverse=True— сортировка по убыванию.key=<callable>— функция, применяемая к каждому элементу перед сравнением.
Сортировка по убыванию:
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.
Чтобы получить перевёрнутую копию без изменения оригинала, используйте 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) объединяет его элементы.