Методы списков: append, extend, insert, pop, remove
Методы списков: append, extend, insert, pop, remove
В предыдущем уроке вы создавали списки и читали их элементы. Теперь изучим, как изменять список: добавлять и удалять элементы. Список в Python — объект, а у объектов есть методы. Вызов метода: список.метод(аргументы).
append: добавить в конец
append(elem) добавляет один элемент в конец списка. Список изменяется на месте (in-place):
fruits = ["яблоко", "банан"]
fruits.append("вишня")
print(fruits) # ['яблоко', 'банан', 'вишня']
fruits.append("апельсин")
print(fruits) # ['яблоко', 'банан', 'вишня', 'апельсин']
append возвращает None — не результат, а изменяет список напрямую. Типичная ошибка:
fruits = ["яблоко"]
fruits = fruits.append("банан") # fruits теперь None!
print(fruits) # None — ошибка! append возвращает None
Просто пишите fruits.append("банан") — без присваивания.
extend: добавить несколько элементов
extend(iterable) добавляет все элементы итерируемого объекта (списка, строки, range) в конец:
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
print(a) # [1, 2, 3, 4, 5, 6]
a.extend(range(7, 10))
print(a) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
Разница между append и extend:
nums = [1, 2, 3]
nums.append([4, 5]) # добавит [4, 5] как один элемент
print(nums) # [1, 2, 3, [4, 5]]
nums2 = [1, 2, 3]
nums2.extend([4, 5]) # добавит 4 и 5 по отдельности
print(nums2) # [1, 2, 3, 4, 5]
Оператор += для списков работает как extend:
a = [1, 2]
a += [3, 4] # эквивалентно a.extend([3, 4])
print(a) # [1, 2, 3, 4]
insert: вставить по индексу
insert(index, elem) вставляет элемент перед указанным индексом:
nums = [1, 2, 4, 5]
nums.insert(2, 3) # вставить 3 перед индексом 2
print(nums) # [1, 2, 3, 4, 5]
nums.insert(0, 0) # вставить в начало
print(nums) # [0, 1, 2, 3, 4, 5]
Если индекс >= длины списка — элемент добавляется в конец (как append). Если отрицательный — вставка относительно конца.
pop: удалить по индексу и вернуть
pop(index) удаляет элемент по индексу и возвращает его. Без аргумента удаляет и возвращает последний элемент:
fruits = ["яблоко", "банан", "вишня", "апельсин"]
last = fruits.pop() # удалить последний
print(last) # апельсин
print(fruits) # ['яблоко', 'банан', 'вишня']
second = fruits.pop(1) # удалить по индексу 1
print(second) # банан
print(fruits) # ['яблоко', 'вишня']
pop удобен для реализации стека (LIFO — последний пришёл, первый ушёл):
stack = []
stack.append(1)
stack.append(2)
stack.append(3)
print(stack.pop()) # 3
print(stack.pop()) # 2
remove: удалить по значению
remove(value) удаляет первое вхождение указанного значения:
colors = ["красный", "синий", "зелёный", "синий"]
colors.remove("синий")
print(colors) # ['красный', 'зелёный', 'синий'] — удалён первый "синий"
Если значения нет в списке — ValueError:
# colors.remove("жёлтый") # ValueError: list.remove(x): x not in list
Проверяйте наличие перед удалением:
if "жёлтый" in colors:
colors.remove("жёлтый")
Другие полезные методы
nums = [3, 1, 4, 1, 5, 9, 2]
# clear: очистить список
nums.clear()
print(nums) # []
nums = [3, 1, 4, 1, 5, 9, 2]
# count: подсчёт вхождений значения
print(nums.count(1)) # 2
# index: индекс первого вхождения
print(nums.index(5)) # 4
# reverse: перевернуть список на месте
nums.reverse()
print(nums) # [2, 9, 5, 1, 4, 1, 3]
# copy: создать мелкую копию
backup = nums.copy()
Сводная таблица
| Метод | Что делает | Возвращает |
|---|---|---|
append(x) | добавить x в конец | None |
extend(iterable) | добавить все элементы | None |
insert(i, x) | вставить x перед индексом i | None |
pop(i=-1) | удалить и вернуть элемент | удалённый элемент |
remove(x) | удалить первое вхождение x | None |
clear() | очистить список | None |
count(x) | подсчёт вхождений | int |
index(x) | индекс первого вхождения | int |
reverse() | перевернуть на месте | None |
copy() | мелкая копия | новый список |
Проверь себя
Что произойдёт с items после выполнения?
items = [1, 2, 3, 4, 5]
items.insert(2, 99)
items.pop(0)
items.remove(4)
print(items)
insert(2, 99)→[1, 2, 99, 3, 4, 5]pop(0)→ удаляет1→[2, 99, 3, 4, 5]remove(4)→ удаляет4→[2, 99, 3, 5]
Итог
append(x)— добавить один элемент в конец.extend(iterable)— добавить несколько элементов;+=делает то же самое.insert(i, x)— вставить перед индексомi.pop(i)— удалить и вернуть по индексу;pop()без аргумента — последний.remove(x)— удалить первое вхождение значения;ValueError, если нет.- Большинство методов изменяют список на месте и возвращают
None.
В следующем уроке познакомимся с кортежами — неизменяемой версией списка — и научимся делать распаковку.