Методы списков
Списки в Python обладают множеством встроенных методов, которые значительно упрощают работу с ними. При этом списки изменяемы, поэтому большая часть методов изменяет исходный список и возвращает None. Это отличает их от строк, для которых методы возвращают их преобразованную копию.
Добавление элемента в конец списка
Метод list.append() добавляет элемент в конец списка.
|
Метод |
|
|
Описание |
Добавляет в конец списка |
|
Параметры |
|
|
Возвращаемое значение |
|
Например, добавим в конец списка с одеждой новый элемент:
clothes = ["Туника", "Тога"]
clothes.append("Мантия")
print(clothes)
# Вывод: ['Туника', 'Тога', 'Мантия']
При этом если использовать данный метод для добавления другого списка, то он будет добавлен целиком как отдельный элемент:
clothes = ["Туника", "Тога", "Мантия"]
hats = ["Повязка", "Капюшон"]
clothes.append(hats)
print(clothes)
# Вывод: ['Туника', 'Тога', 'Мантия', ['Повязка', 'Капюшон']]
Поэтому список hats становится вложенным списком внутри clothes.
Добавление элемента в список по индексу
Элемент можно добавить не только в конец списка, но и по определённому индексу с помощью метода list.insert().
|
Метод |
|
|
Описание |
Вставляет объект |
|
Параметры |
|
|
Возвращаемое значение |
|
Элемент, находившийся ранее по этому индексу, и все последующие элементы сдвигаются на одну позицию вправо:
meals = ["Завтрак", "Ужин"]
meals.insert(1, "Обед")
print(meals)
# Вывод: ['Завтрак', 'Обед', 'Ужин']
Расширение списка другой коллекцией
Метод list.extend() добавляет в список все элементы другой коллекции.
|
Метод |
|
|
Описание |
Расширяет список |
|
Параметры |
|
|
Возвращаемое значение |
|
Результат данного метода совпадает с результатом конкатенации списков, однако метод list.extend() расширяет список элементами не только другого списка, но и любой встроенной коллекции:
accessories = ["Часы", "Шарф"]
jewelry = ("Браслет", "Серьги", "Кольцо")
accessories.extend(jewelry)
print(accessories)
# Вывод: ['Часы', 'Шарф', 'Браслет', 'Серьги', 'Кольцо']
Если в метод list.extend() передать строку, то она будет посимвольно добавлена в конец списка:
accessories = ["Часы", "Шарф", "Браслет", "Серьги", "Кольцо"]
accessories.extend("Боа")
print(accessories)
# Вывод: ['Часы', 'Шарф', 'Браслет', 'Серьги', 'Кольцо', 'Б', 'о', 'а']
Удаление элементов списка
Элемент из списка можно удалить как по значению, так и по индексу, а также можно полностью очистить список, удалив все его элементы.
Удаление элемента из списка по значению
По значению элемент из списка удаляет метод list.remove().
|
Метод |
|
|
Описание |
Удаляет из списка |
|
Параметры |
|
|
Возвращаемое значение |
|
Если в списке несколько элементов с удаляемым значением, то метод удаляет первый элемент (с наименьшим индексом), в то время как остальные элементы с этим значением останутся в списке без изменений:
gadgets = ["Компьютер", "Телефон", "Планшет", "Компьютер", "Компьютер"]
gadgets.remove("Компьютер")
print(gadgets)
# Вывод: ['Телефон', 'Планшет', 'Компьютер', 'Компьютер']
Но если элемент не найден, то будет вызвано исключение ValueError.
Удаление элемента из списка по индексу
По индексу элемент из списка удаляет метод list.pop(). Кроме этого, он также возвращает этот элемент.
|
Метод |
|
|
Описание |
Удаляет и возвращает из списка |
|
Параметры |
Необязательные параметры: index – индекс элемента, который требуется удалить. По умолчанию |
|
Возвращаемое значение |
Удаляемый элемент |
Элемент, удаляемый с помощью метода list.pop(), можно сохранить в отдельной переменной и использовать его позже:
ships = ["Фрегат", "Эсминец", "Крейсер", "Авианосец"]
deleted_ship = ships.pop(2)
print(f"Удаленный элемент: {deleted_ship}")
# Вывод: Удаленный элемент: Крейсер
Не обязательно указывать индекс удаляемого элемента, тогда метод удалит и возвратит последний элемент списка:
desserts = ["Пудинг", "Тирамису", "Чизкейк", "Пастила"]
last_deleted_dessert = desserts.pop()
print(f"Удаленный элемент: {last_deleted_dessert}")
# Вывод: Удаленный элемент: Пастила
Удаление всех элементов списка
Также можно полностью очистить список, используя метод list.clear().
|
Метод |
|
|
Описание |
Удаляет все элементы списка |
|
Возвращаемое значение |
|
Тогда список станет пустым:
homework = ["Упражнение 225", "Параграф 12", "номер 126(б, г)"]
homework.clear()
print(homework)
# Вывод: []
Инверсия элементов списка
Метод list.reverse() инвертирует список, то есть изменяет порядок его элементов на противоположный. Как и другие методы списков, он модифицирует исходный список, делая первый элемент последним, второй – предпоследним и так далее.
|
Метод |
|
|
Описание |
Изменяет порядок элементов списка |
|
Возвращаемое значение |
|
После использования этого метода мы не можем вернуться к исходному порядку элементов в списке:
seasons = ["Зима", "Весна", "Лето", "Осень"]
seasons.reverse()
print(seasons)
# Вывод: ['Осень', 'Лето', 'Весна', 'Зима']
# Вывод: ['Осень', 'Лето', 'Весна', 'Зима']
Если же нужно сохранить исходный список, то следует использовать функцию reversed(). Она не изменяет порядок элементов в исходной коллекции, а создаёт обратный итератор этой коллекции.
|
Функция |
|
|
Описание |
Возвращает обратный итератор итерируемого объекта |
|
Параметры |
|
|
Возвращаемое значение |
Обратный итератор |
Если итератор – это объект, который обеспечивает перебор элементов, то обратный итератор – это объект, обеспечивающий перебор элементов коллекции в обратном порядке:
years = [2020, 2021, 2022]
reversed_years = reversed(years)
for year in reversed_years:
print(year)
# Вывод: 2022
# Вывод: 2021
# Вывод: 2020
Обычно его преобразуют в какую-либо коллекцию для использования её свойств и методов:
years = [1995, 1996, 1997]
reversed_years = list(reversed(years))
reversed_years.append(1998)
print(reversed_years)
# Вывод: [1995, 1996, 1997, 1998]
При этом порядок элементов в исходной коллекции останется неизменным.
Сортировка элементов списка
Для того, чтобы отсортировать элементы списка по возрастанию или убыванию, предназначен метод list.sort(). Как и метод list.reverse() он изменяет исходный список.
|
Метод |
|
|
Описание |
Сортирует элементы списка |
|
Параметры |
Необязательные параметры:
|
|
Возвращаемое значение |
|
По умолчанию этот метод сортирует список по возрастанию:
temperature = [25, 21, 18, 26, 24, 25]
temperature.sort()
print(temperature)
# Вывод: [18, 21, 24, 25, 25, 26]
По убыванию список можно отсортировать, если указать параметр reverse=True:
temperature.sort(reverse=True)
print(temperature)
# Вывод: [26, 25, 25, 24, 21, 18]
Параметр key позволяет указать функцию или метод, который будет применяться к каждому элементу списка перед сортировкой. При этом функция или метод в таком случае передаются как объект, а не вызываются, поэтому должны быть написаны без скобок.
Например, по умолчанию список строк сортируется в лексикографическом порядке:
fruits = ["Абрикос", "Дыня", "Слива", "Апельсин"]
fruits.sort()
print(fruits)
# Вывод: ['Абрикос', 'Апельсин', 'Дыня', 'Слива']
Но мы можем отсортировать его по длине строки, передав параметру key функцию len:
fruits.sort(key=len)
print(fruits)
# Вывод: ['Дыня', 'Слива', 'Абрикос', 'Апельсин']
Метод list.sort() изменяет исходный список, поэтому если нужно сохранить порядок элементов в исходном списке и получить его отсортированную копию, то следует использовать функцию sorted().
|
Функция |
|
|
Описание |
Создает отсортированный список из элементов итерируемого объекта |
|
Параметры |
Необязательные параметры:
|
|
Возвращаемое значение |
Отсортированный список |
Результат функции sorted() можно присвоить другой переменной, так как она возвращает новый отсортированный список, а не None.
classroom = ["Спортзал", "12А", "Компьютерный класс"]
sorted_classroom = sorted(classroom)
print(sorted_classroom)
# Вывод: ['12А', 'Компьютерный класс', 'Спортзал']
При этом в исходном списке порядок элементов остаётся прежним:
print(classroom)
# Вывод: ['Спортзал', '12А', 'Компьютерный класс']
Однако при сортировке списка как с помощью метода list.sort(), так и с помощью функции sort(), важно следить за тем, чтобы все элементы сортируемого списка были одного типа данных, иначе будет вызвано исключение TypeError:
cards = [6, 7, "Червовый Туз"]
sorted_cards = sorted(cards)
print(sorted_cards)
# Ошибка: TypeError: '<' not supported between instances of 'str' and 'int'
Как и метод list.sort() функция sorted() принимает необязательные параметры reverse и key, задающие направление сортировки и функцию, применяемую к каждому элементу.
Например, отсортируем список овощей по убыванию:
vegetables = ["Капуста", "кукуруза", "Перец", "помидор"]
sorted_vegetables = sorted(vegetables, reverse=True)
print(sorted_vegetables)
# ['помидор', 'кукуруза', 'Перец', 'Капуста']
При сортировке в лексикографическом порядке большое значение имеет регистр букв, но мы можем передать параметру key метод приведения строки к нижнему регистру – str.lower():
sorted_vegetables_2 = sorted(vegetables, key=str.lower, reverse=True)
print(sorted_vegetables_2)
# Вывод: ['помидор', 'Перец', 'кукуруза', 'Капуста']
Здесь перед сортировкой строки приводятся к нижнему регистру и только потом сортируются в лексикографическом порядке.
Примеры
Пример 1. Приоритетность заказов
Программа добавляет новый VIP-заказ в начало списка обычных заказов:
orders = ["Заказ #101", "Заказ #102"]
vip_order = "VIP-Заказ #200"
orders.insert(0, vip_order) # Вставка на первое место (по индексу 0)
print("Очередь заказов:", orders)
Вывод:
Очередь заказов: ['VIP-Заказ #200', 'Заказ #101', 'Заказ #102']
Пример 2. Обработка вызовов
Система обрабатывает вызовы в колл-центре по принципу «последний пришёл – первый ушёл»:
calls = ["Звонок #1", "Звонок #2", "Звонок #3"]
while calls:
current_call = calls.pop() # Извлекаем с конца
print("Обрабатывается:", current_call)
print("Очередь пуста")
Вывод:
Обрабатывается: Звонок #3
Обрабатывается: Звонок #2
Обрабатывается: Звонок #1
Очередь пуста
Пример 3. Ввод команд для быстрого доступа
Электронный журнал позволяет пользователю ввести команды для быстрого доступа и запрашивает эти команды до ввода слова «стоп», написанного в любом регистре. После сохранения команд система очищает список с ними:
commands = []
# Команды перестанут запрашиваться и сохраняться после ввода команды "стоп" в любом регистре
new_command= input("Введите команду: ")
while new_command.lower() != "стоп":
commands.append(new_command)
new_command= input("Введите команду: ")
print(f"Идёт сохранение {len(commands)} команд... Команды сохранены!")
commands.clear()
print(f"Не сохранённые команды: {commands}")
Вывод:
Введите команду: Выделить текст красным
Введите команду: Рассчитать средний балл
Введите команду: Написать замечание
Введите команду: сТОп
Идёт сохранение 3 команд... Команды сохранены!
Несохранённые команды: []
Метод list.clear() работает быстрее, чем создание нового пустого списка files = [].
Итоги
- Функция
reversed()возвращает обратный итератор – объект, обеспечивающий перебор элементов итерируемого объекта в обратном порядке. Его можно преобразовать в коллекцию с помощью специальных функций, например,list()илиtuple(). - Функция
sorted()возвращает отсортированный список из элементов итерируемого объекта. Можно задать как направление сортировки, так и функцию, которая будет применяться к каждому элементу итерируемого объекта.
|
Метод |
Описание |
|---|---|
|
|
Добавляет в конец списка |
|
|
Вставляет объект |
|
|
Расширяет список |
|
|
Удаляет из списка |
|
|
Удаляет и возвращает из списка |
|
|
Удаляет все элементы списка |
|
|
Изменяет порядок элементов списка |
|
|
Сортирует элементы списка |
Задания для самопроверки
1. Как метод list.append() добавляет в список в другой список?
Список добавляется целиком как отдельный вложенный элемент.
2. Дан список statues = ["Статуя Единства", "Статуя Свободы"]. Вставьте строку "Рабочий и колхозница" по индексу 1 и выведите полученный список на экран.
statues = ["Статуя Единства", "Статуя Свободы"]
statues.insert("Рабочий и колхозница", 1)
print(statues)
# Вывод: ['Статуя Единства', 'Рабочий и колхозница', Статуя Свободы']
3. Какие два метода используются для удаления элементов из списка? Чем они отличаются?
Для удаления элементов из списка используются методы list.remove() и list.pop(). Метод list.remove() удаляет первое вхождение элемента по значению, а метод list.pop() удаляет элемент по индексу и возвращает удаленный элемент. Если индекс не указан, удаляется и возвращается последний элемент.
4. Дан список numbers = [1, 2, 3, 4, 5]. Удалите из него элемент с индексом 2 и выведите этот элемент на экран.
numbers = [1, 2, 3, 4, 5]
deleted_number = numbers.pop(2)
print(f"Удалён элемент: {deleted_number}")
# Вывод: Удалён элемент: 3
5. Чем отличается функция sorted() от метода list.sort()?
Функция sorted() не изменяет исходный список, а возвращает новый отсортированный список. Метод list.sort(), наоборот, сортирует (изменяет) исходный список и возвращает None.
6. Запросите у пользователя две строки и преобразуйте их в списки, используя в качестве разделителя пробел. Объедините эти списки в один, отсортируйте его элементы по возрастанию их длины и выведите итоговый список на экран.
|
Пример входных данных |
Пример выходных данных |
|---|---|
|
|
|
|
|
|
|
|
|
lst1 = input("Введите первую строку: ").split()
lst2 = input("Введите вторую строку: ").split()
lst = lst1 + lst2
print(sorted(lst, key=len))
0 комментариев