python
August 15, 2024

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

Привет всем! В предыдущей статье "Python методы строк" мы подробно рассмотрели методы для работы со строками в Python. Теперь я хотел бы поделиться с вами информацией о методах, которые можно использовать для работы со списками.

В этой статье мы сосредоточимся на практических примерах, чтобы сделать материал более доступным и понятным, избегая сухого пересказа документации. Надеюсь, что эти примеры помогут вам легко усвоить материал и применять его на практике. Приятного чтения! :)

Списки в Python, хотя и имеют ограниченное количество методов (всего 11), однако они весьма функциональны и часто применяются на практике. Я рекомендую вам внимательно изучить и запомнить эти методы, так как они являются ключевыми для работы со списками.

Метод 1. append(item)

Метод append(item) в Python - это метод, который позволяет нам добавить элементы в конец списка.

Синтаксис:

list_name.append(item)

где :

  • list_name - это имя списка
  • item - элемент, который мы хотим добавить в КОНЕЦ списка.

Рассмотрим применение этого метода, на примере:

Представим, что вы очень преданы программированию и ведёте все свои записи в виде кода. Ну что поделать, вот такие мы программисты:)
У вас есть список продуктов, которые вы хотите купить:

shop_list = ["bread", "milk", "egg"]

По пути в магазин вы вспомнили, что вам необходимо купить печенье. Чтобы снова про них не забыть, нужно записать их в наш список. Давайте используем только что изученный метод append:

shop_list = ["bread", "milk", "egg"]
shop_list.append("cookie")

Проверим что у нас получилось и выведем результат на экран:

shop_list = ["bread", "milk", "egg"]
shop_list.append("cookie")
print(shop_list)

Результат выполнения программы будет выглядеть вот так:

["bread", "milk", "egg", "cookie"]

Как вы можете заметить, мы добавили в КОНЕЦ нашего списка.

Уже второй раз, я довольно тонко намекаю на то, что мы добавляем запись именно в конец списка, но что делать если вам нужно изменить порядок и добавить запись например на первое или второе место?

Метод 2. insert(index, item)

Метод insert() в Python позволяет вставить элемент в список по указанному индексу.

Синтаксис метода insert():

list_name.insert(index, item)

где:

  • list_name — список, в который нужно вставить элемент;
  • index — индекс позиции, на которую нужно вставить элемент;
  • item — элемент, который нужно вставить в список.

Продолжим нашу историю с походом в магазин. Предположим, что после добавления печенья в список покупок, вы вспомнили, что вам нужно купить масло, и купить его обязательно перед молоком. Поверьте, так нужно! Для этого мы можем использовать метод insert(), который позволяет вставить элемент в список по указанному индексу.

Давайте добавим масло в наш список покупок перед молоком:

shopping_list = ["bread", "milk", "egg", "cookie"]
shopping_list.insert(1, "butter")

Проверим, что у нас получилось:

shopping_list = ["bread", "milk", "egg", "cookie"]
shopping_list.insert(1, "butter")
print(shopping_list)

Результат выполнения программы будет выглядеть так:

["bread", "butter", "milk", "egg", "cookie"]

Как видите, масло теперь находится на втором месте в списке, перед молоком.

Отлично, по пути вы вспомнили о необходимых покупках, а вместе с этим и выучили два новых метода.

Метод 3. remove(item)

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

Синтаксис метода remove():

list.remove(item)

где:

  • list — список, из которого нужно удалить элемент;
  • item — элемент, который нужно удалить из списка.

И так, вы уже в магазине, купили всё необходимое и решили заглянуть в корзину. Какого было ваше удивление, когда вы увидели в ней чипсы и колу... а ведь ещё вчера, поймав ночную мотивацию, вы решили, что начнёте правильно питаться.

По этому вы не будете покупать чипсы, которые, чисто случайно оказались в корзине.

Давайте удалим печенье из нашего списка покупок:

basket = ["bread", "butter", "chips", "milk", "egg", "cookie", "cola"]
basket.remove("chips")

Проверим результат:

basket = ["bread", "butter", "chips", "milk", "egg", "cookie", "cola"]
basket.remove("chips")
print(basket)

Результат выполнения программы будет выглядеть так:

["bread", "butter", "milk", "egg", "cookie", "cola"]

Теперь в нашем списке покупок нет печенья.

Обратите внимание, что метод удаляет только первый найденный элемент соответствующий заданному значению.

Если у вас возник вопрос: "А что с колой?". Резко всё бросать нельзя, пока попридержим её. =)

Метод 4. pop(index)

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

Синтаксис метода pop():

list_name.pop(index)

где:

  • list — список, из которого нужно удалить элемент;
  • index — индекс элемента, который нужно удалить (НЕОБЯЗАТЕЛЬНЫЙ параметр).

Предположим, что вы решили не покупать яйца и хотите удалить их из списка. Используем метод pop():

basket = ["bread", "butter", "milk", "egg", "cookie", "cola"]
removed_item = basket.pop()

Проверим, что у нас получилось:

basket = ["bread", "butter", "milk", "egg", "cookie", "cola"]
removed_item = basket.pop()
print(basket)
print(f"Удаленный элемент: {removed_item}")

Результат выполнения программы будет выглядеть так:

["bread", "butter", "milk", "egg", "cookie"]
Удаленный элемент: cola

Теперь в нашей корзине нет колы, и мы знаем, что удалили именно её.

Давайте удалим ещё что-то?) Например, 3 элемент в списке и проверим результат:

basket = ["bread", "butter", "milk", "egg", "cookie"]
removed_item = basket.pop(2)
print(basket)
print(f"Удаленный элемент: {removed_item}")

Результат выполнения программы будет выглядеть так:

["bread", "butter", "egg", "cookie"]
Удаленный элемент: milk

Важно! Если ваш список будет пустым или вы укажете несуществующий индекс, тогда возникнет ошибка IndexError.

Метод 5. extend()

Метод extend() в Python используется для добавления элементов в конец списка из другого итерируемого объекта, такого как список, кортеж или строка. Это позволяет объединить несколько списков в один.

Опр. Итерируемый объект (iterable) - это объект, который способен возвращать элементы по одному.

P.S. Это довольно сложное определение для начинающих. Условно запомните, что итерируемый объект это тот, который состоит из нескольких других. Из нами изученных это: строки и списки.

Синтаксис метода extend() выглядит следующим образом:

list_name.extend(iterable)

где:

  • list_name — имя списка, к которому применяется метод
  • iterable — итерируемый объект, элементы которого нужно добавить в список.

Пример:

my_list = []
my_list.extend([1, 2, 3])  # my_list = [1, 2, 3]
my_list.extend('add')  # my_list = [1, 2, 3, 'a', 'd', 'd']

В предыдущем примере, метод pop мог вернуть нам объект, который он "забрал" из списка. Так вот, если вы попробуете присвоить результат применения метода extend какой либо переменной, то вы получите None.

None - это особый тип данных, который обозначает "ничего" или "пустоту".

Метод 6. clear()

Бывают случаи, когда вы не хотите удалять список, но вам необходимо очистить его. Для этой задачи идеально подходит метод clear().

Синтаксис метода clear:

your_list.clear()

где your_list — это список, для которого мы хотим удалить все элементы.

Давайте вспомним наш пример с магазином и уберем вообще все продукты из корзины:

basket = ["bread", "butter", "egg", "cookie"]
basker.clear()
print(basket)

Выведет:

[]

В этом примере мы взяли нашу корзину и удалили все продукты из неё. Как вы можете заметить, теперь наш список (корзина из примера) стал пустым.

Метод 7. count(item)

Иногда вам будет необходимо подсчитать количество определенных элементов в списке. На небольших данных, мы можем сделать это быстро и вручную, но что если у нас в списке 100, 1000 или 1.000.000 элементов? Для этого существует метод count().

Его синтаксис, весьма прост:

your_list.count(item)

где:

  • your_list - это список, в котором необходимо подсчитать число входящих элементов
  • item - искомый элемент, количество которого хотим найти

Пример 1.

У нас есть список оценок учащихся за контрольную по математике и нам нужно посчитать количество "5", "4", "3" и "2":

test_scores = [5, 4, 5, 4, 3, 4, 3, 3, 2, 5, 3, 4, 5, 5, 
               4, 5, 4, 3, 5, 4, 3, 5, 4, 4, 2, 4, 3, 5, 4]

count_5 = test_scores.count(5)
count_4 = test_scores.count(4)
count_3 = test_scores.count(3)
count_2 = test_scores.count(2)

print(count_5) # 9
print(count_4) # 11
print(count_3) # 7
print(count_2) # 2

Пример 2.

Мы можем считать не только количество чисел, но и любых других объектов в Python:

mixed_list = ["apple", "banana", "apple", 1, 2, "banana", 1, "apple"]

apple_count = mixed_list.count("apple")
banana_count = mixed_list.count("banana")
number_one_count = mixed_list.count(1)

print(f"Количество 'apple': {apple_count} шт")
print(f"Количество 'banana': {banana_count} шт")
print(f"Количество числа 1: {number_one_count} шт")

Выведет:

Количество 'apple': 3 шт
Количество 'banana': 2 шт
Количество цифры 1: 2 шт

Метод 8. reverse()

Что делать, если нам нужно отобразить элементы списка в обратном порядке? Конечно же использовать метод reverse().

Синтаксис этого метода весьма прост:

your_list.reverse()

где:

  • your_list - список, порядок которого мы хотим изменить.

Пример:

fruits = ["apple", "banana", "cherry", "date"]

# Использование метода reverse() для изменения порядка элементов
fruits.reverse()

print(fruits)

Выведет:

['date', 'cherry', 'banana', 'apple']

Таким образом, метод reverse() позволяет легко и быстро изменить порядок элементов в списке на обратный

Метод 9. sort()

Элементы в списке разбросаны в непонятном порядке? Вы хотите это исправить? Используйте метод sort(). Он сортирует элементы списка в порядке возрастания или убывания. По умолчанию он сортирует значения в порядке возрастания.

При этом, данный метод изменяет исходный объект, а не создаёт новый.

Его синтаксис:

your_list.sort(key=None, reverse=False)

где:

  • your_list - список, который необходимо отсортировать
  • reverse (необязательно): для reverse=True, это приведет к сортировке списка по убыванию. По умолчанию значение reverse=False (Сортировка по возрастанию)
  • key (необязательно) – функция для указания критериев сортировки

Примеры:

Пример 1: Сортировка по возрастанию

numbers = [4, 2, 1, 3, 5]
numbers.sort()
print(numbers)  # Вывод: [1, 2, 3, 4, 5]

Здесь мы имеем список чисел [4, 2, 1, 3, 5]. Используя метод sort(), мы сортируем элементы этого списка в порядке возрастания. После выполнения метода, список изменяется, и его элементы располагаются в последовательности от меньшего к большему: [1, 2, 3, 4, 5].

Пример 2: Сортировка по убыванию

numbers = [4, 2, 1, 3, 5]
numbers.sort(reverse=True)
print(numbers)  # Вывод: [5, 4, 3, 2, 1]

В этом примере мы снова начинаем с того же списка чисел [4, 2, 1, 3, 5]. Однако на этот раз мы используем параметр reverse=True в методе sort(), чтобы отсортировать элементы в порядке убывания. В результате, список изменяется, и его элементы располагаются от большего к меньшему: [5, 4, 3, 2, 1].

Пример 3: Сортировка с использованием ключа

words = ["apple", "banana", "cherry", "date"]
words.sort(key=len)  # Сортировка по длине строк
print(words)  # Вывод: ['date', 'apple', 'banana', 'cherry']

Тут мы работаем со списком строк ["apple", "banana", "cherry", "date"]. Перед нами стоит задача отсортировать эти строки не по алфавиту, а по их длине. Для этого мы используем параметр key=len в методе sort(), который указывает, что сортировка должна быть выполнена на основе длины строк. В результате, список изменяется, и строки располагаются в порядке возрастания их длины: ['date', 'apple', 'banana', 'cherry'].

В этом примере len, переданная как значение ключа - это функция len(), для расчёта длины строки.

Пример 4: Сортировка списка словарей по ключу

(Это сложный пример можете его пропустить, если только начинаете изучать язык)

Допустим у нас есть список словарей, где каждый словарь представляет собой информацию о человеке с именем и возрастом. Мы хотим отсортировать этот список по возрасту.

Для этого мы используем параметр key с функцией-лямбдой lambda x: x["age"], которая указывает, что сортировка должна быть выполнена по значению ключа "age" в каждом словаре.

people = [
    {"name": "Alice", "age": 30},
    {"name": "Bob", "age": 25},
    {"name": "Charlie", "age": 35}
]
people.sort(key=lambda x: x["age"])  # Сортировка по возрасту
print(people)

Выведет:

[{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Charlie', 'age': 35}]

В результате, список изменяется, и словари располагаются в порядке возрастания возраста: [{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Charlie', 'age': 35}].

Метод 10. index()

Метод index() в Python используется для нахождения индекса первого вхождения заданного элемента в списке. Если элемент не найден, метод вызывает исключение ValueError. Этот метод особенно полезен, когда вам нужно знать позицию конкретного элемента в списке.

Синтаксис метода index():

temp_list.index(value, start, end)

где:

  • value — элемент, который мы ищем в списке temp_list.
  • start (необязательный параметр, по умолчанию 0) — индекс начала среза в списке, в котором требуется найти элемент. Индекс берется включительно.
  • end (необязательный параметр, по умолчанию None, что означает конец списка) — индекс конца среза списка, в котором требуется найти элемент. Конечный индекс не входит в отрезок для поиска.

Примеры использования:

Пример 1. Давайте просто найдём индекс какого-то элемента в нашем списке:

fruits = ['apple', 'banana', 'cherry']
index = fruits.index('banana')
print(index)  # Вывод: 1

При чём, если у нас будет несколько одинаковых элементов, то мы всё равно получим индекс первого найденного:

fruits = ['apple', 'banana', 'banana', 'cherry']
index = fruits.index('banana')
print(index)  # Вывод: 1

Пример 2. Попробуем использовать необязательные параметры этого метода:

numbers = [10, 20, 30, 40, 50, 20, 60]
index = numbers.index(20, 2, 5)
print(index)

Выведет:

Traceback (most recent call last):
  File "main.py", line 2, in <module>
	index = numbers.index(20, 2, 5)
ValueError: 20 is not in list

Разберемся с результатом... В качестве искомого объекта мы выбрали число 20, но при этом указали, что хотим начать поиск со второго объекта в списке и не будем проверять список до конца, а остановимся на пятом элементе.

Первая 20 имела индекс 1, она не входит в наш интервал. Вторая 20 в этом списке имеет индекс 5, что находится на границе указанного нами интервала.

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

Метод 11. copy()

Этот метод возвращает поверхностную копию исходного списка. Действие метода эквивалентно выражению my_list[:].

Для людей, которые хорошо ознакомились со срезами, данный синтаксис будет понятным, если же данное знание вызвало затруднение, то вам следует прочитать статью "Строки и операции над ними", где я подробно рассказал, про индексы и срезы ;)

Синтаксис метода copy():

copy_list = main_list.copy()

где:

  • main_list - это список, который мы хотим скопировать
  • copy_list - это список, который получился в результате копирования основного

Важное уточнение: возвращаемая копия является поверхностной, то есть без рекурсивного копирования вложенных элементов. Проще говоря, если вы измените что-то в поверхностной копии, это изменение будет отражено и в исходном списке, если оно касается общих элементов.

Пример:

main_list = [1, 2, [3, 4]]
copy_list = main_list.copy()

# Изменим парочку элементов в поверхностной копии
copy_list[2][0] = 5
copy_list[0] = 3

print(main_list)  # Вывод: [1, 2, [5, 4]]
print(copy_list)  # Вывод: [3, 2, [5, 4]]

В этом примере видно, что изменение во вложенном списке отразилось и в исходном списке main_list, так как поверхностная копия не копирует вложенные объекты рекурсивно. В то же время, при изменении "первичного" объекта, мы изменили только поверхностную копию.

Сейчас это может быть немного трудным, но подробнее о "поверхностных" и "глубоких" копиях, мы поговорим в одной из следующих статьей! ;)

На этом данная статья заканчивается, благодарю вас за внимание! Если у вас остались вопросы, смело задавайте их в нашем телеграмм канале!