Методы списков
Списки в Python обладают множеством встроенных методов, которые значительно упрощают работу с упорядоченными коллекциями данных. Рассмотрим основные методы для добавления, удаления и изменения порядка элементов в списках.
Добавление элемента в конец списка
Для добавления элемента item
в конец списка используется метод list.append()
.
Метод |
|
Описание | Добавляет в конец списка list объект item |
Параметры | item – объект, который нужно добавить в конец списка |
Возвращаемое значение | None |
Например, добавим в конец списка с одеждой новый элемент:
clothes = ["Туника", "Тога"]
clothes.append("Мантия")
print(clothes)
# Вывод: ['Туника', 'Тога', 'Мантия']
При этом если использовать данный метод для добавления другого списка, то он будет добавлен целиком как отдельный элемент:
clothes = ["Туника", "Тога", "Мантия"]
hats = ["Повязка", "Капюшон"]
clothes.append(hats)
print(clothes)
# Вывод: ['Туника', 'Тога', 'Мантия', ['Повязка', 'Капюшон']]
Так список hats
становится вложенным списком внутри clothes
.
Добавление элемента в список по индексу
Добавить элемент не в конец списка, а по определённому индексу, позволяет метод list.insert()
.
Метод | list.insert(item, index) |
Описание | Вставляет элемент item в список list по индексу index |
Параметры | item – элемент, который нужно добавить в списокindex – индекс, по которому вставляет элемент |
Возвращаемое значение | None |
Элемент, находившийся ранее по этому индексу, и все последующие элементы сдвигаются на одну позицию вправо:
meals = ["Завтрак", "Ужин"]
meals.insert("Обед", 1)
print(meals)
# Вывод: ["Завтрак", "Обед", "Ужин"]
Расширение списка другой коллекцией
Объединить два списка в один можно с помощью операции конкатенации (сложения):
shoes = ["Сандалии", "Ботинки", "Сапоги"]
extra_shoes = ["Балетки", "Ботильоны"]
shoes += extra_shoes
print(shoes)
# Вывод: ['Сандалии', 'Ботинки', 'Сапоги', 'Балетки', 'Ботильоны']
Но также существует специальный метод list.extend()
, позволяющий расширить список элементами другой коллекцией.
Метод | list.extend(iterable) |
Описание | Расширяет список list всеми объектами коллекции iterable |
Параметры | iterable – коллекция, элементы которой нужно добавить в конец списка |
Возвращаемое значение | None |
Данный метод добавляет в конец списка все элементы итерируемого объекта iterable
, то есть списка, кортежа и так далее:
accessories = ["Часы", "Шарф"]
jewelry = ("Браслет", "Серьги", "Кольцо")
accessories.extend(jewelry)
print(accessories)
# Вывод: ['Часы', 'Шарф', 'Браслет', 'Серьги', 'Кольцо']
Если в метод list.extend()
передать строку, то она будет посимвольно добавлена в конец списка:
accessories = ["Часы", "Шарф", "Браслет", "Серьги", "Кольцо"]
belt = "Кушак"
accessories.extend(belt)
print(clothes)
# Вывод: ['Часы', 'Шарф', 'Браслет', 'Серьги', 'Кольцо', 'К', 'у', 'ш', 'а', 'к']
Удаление элементов списка
Элемент из списка можно удалить как по значению, так и по индексу, а также можно полностью очистить список, удалив все его элементы.
Удаление элемента по значению
Для удаления из списка элемента по значению используется метод list.remove()
.
Метод | list.remove(item) |
Описание | Удаляет из списка list первый найденный элемент item |
Параметры | item – объект, который нужно удалить |
Возвращаемое значение | None |
Если в списке несколько элементов с удаляемым значением, то метод удаляет первый элемент (то есть с наименьшим индексом), в то время как остальные элементы с этим значением останутся в списке без изменений:
gadgets = ["Компьютер", "Телефон", "Планшет", "Компьютер", "Компьютер"]
gadgets.remove("Компьютер")
print(gadgets)
# Вывод: ['Телефон', 'Планшет', 'Компьютер', 'Компьютер']
Но если элемент не найден, то будет вызвано исключение ValueError:
gadgets = ["Компьютер", "Телефон", "Планшет", "Компьютер", "Компьютер"]
gadgets.remove("Магнитофон")
print(gadgets)
# Ошибка: ValueError: list.remove(x): x not in list
Удаление элемента по индексу
В случае, когда нужно удалить элемент по индексу, используется метод list.pop(i)
.
Метод | list.pop(index=-1) |
Описание | Удаляет и возвращает из списка list элемент по индексу index |
Параметры | Необязательные параметры:index – индекс элемента, который требуется удалить, по умолчанию index=-1 , то есть удаляется последний элемент |
Возвращаемое значение | Удаляемый элемент |
Интересной особенностью метода list.pop()
является то, что он не просто удаляет элемент, а ещё и возвращает его:
ships = ["Фрегат", "Эсминец", "Крейсер", "Авианосец"]
deleted_ship = ships.pop(2)
print(f"Удаленный элемент: {deleted_ship}")
# Вывод: Крейсер
print(f"Список после удаления: {ships}")
# Вывод: ["Фрегат", "Эсминец", "Авианосец"]
Не обязательно указывать индекс удаляемого элемента, тогда метод удалит и возвратит последний элемент списка:
last_deleted_ship = ships.pop()
print(f"Удаленный элемент: {last_deleted_ship}")
# Вывод: Авианосец
print(f"Список после удаления: {ships}")
# Вывод: ["Фрегат", "Эсминец"]
Удаление всех элементов списка
Также можно полностью очистить список, оставив его пустым, используя метод list.clear()
.
Метод | list.clear() |
Описание | Удаляет все элементы списка list |
Возвращаемое значение | None |
Удалим все элементы списка:
homework = ["Упражнение 225", "Параграф 12", "номер 126(б, г)"]
homework.clear()
print(homework)
# Вывод: []
Изменение порядка элементов в списках
Порядок элементов списка на обратный можно изменить с помощью метода list.reverse()
. Эта операция выполняется «на месте», то есть модифицирует исходный список, делая первый элемент последним, второй – предпоследним и так далее.
Метод | list.reverse() |
Описание | Изменяет порядок элементов списка list на обратный |
Возвращаемое значение | None |
Метод list.reverse()
изменяет исходный список и возвращает None
, поэтому результат его использования не следует присваивать другой переменной:
seasons = ["Зима", "Весна", "Лето", "Осень"]
seasons.reverse()
print(seasons)
# Вывд: ["Осень", "Лето", "Весна", "Зима"]
Сортировка элементов списка
Отсортировать элементы списка по возрастанию или убыванию позволяет метод list.sort()
.
Метод | list.sort(key=None, reverse=False) |
Описание | Сортирует элементы списка list по возрастанию или по убыванию |
Параметры | Необязательные параметры:key – функция, применяемая к каждому элементу списка перед сортировкой, по умолчанию key=None reverse – логическое значение, определяющее направление сортировки, по умолчанию reverse=False , что означает сортировку по возрастанию |
Возвращаемое значение | None |
По умолчанию этот метод сортирует список по возрастанию, при этом он так же изменяет исходный список и возвращает None
:
temperature = [25, 21, 18, 26, 24, 25]
temperature.sort()
print(temperature)
# Вывод: [18, 21, 24, 25, 25, 26]
Список можно отсортировать по убыванию, если указать параметр reverse=True
:
temperature = [25, 21, 18, 26, 24, 25]
temperature.sort(reverse=True)
print(temperature)
# Вывод: [26, 25, 25, 24, 21, 18]
Параметр key
позволяет указать функцию, которая применяется к каждому элементу списка перед сортировкой.
Например, по умолчанию список строк будет отсортирован в лексикографическом порядке:
fruits = ["Абрикос", "Дыня", "Слива", "Апельсин"]
fruits.sort()
print(fruits)
# Вывод: ['Абрикос', 'Апельсин', 'Дыня', 'Слива']
Но если мы хотим отсортировать их, например, по длине строки, то можем передать параметру key
функцию len
:
fruits = ["Абрикос", "Дыня", "Слива", "Апельсин"]
fruits.sort(key=len)
print(fruits)
# Вывод: ['Дыня', 'Слива', 'Абрикос', 'Апельсин']
Так на первом месте отсортированного списка будет строка "Дыня"
, а не "Абрикос"
, так как сначала была вычислена длина строки для каждого элемента списка, и уже по ней список был отсортирован.
Функция или метод, передаваемые параметру key
, должны быть написаны без скобок, так как в таком случае она должна быть передана как объект, а не вызвана.
Как мы уже говорили, метод list.sort()
изменяет исходный список, поэтому если нужно сохранить порядок элементов в исходном списке и получить его отсортированную копию, то следует использовать функцию sorted()
.
Функция | sorted(iterable, key=None, reverse=False) |
Описание | Создает отсортированный список из элементов итерируемого объекта iterable |
Параметры | iterable – итерируемый объект, который нужно отсортироватьНеобязательные параметры: key – функция, применяемая к каждому элементу списка перед сортировкой, по умолчанию key=None reverse – логическое значение, определяющее направление сортировки, по умолчанию reverse=False , что означает сортировку по возрастанию |
Возвращаемое значение | Отсортированный список |
В отличие от методов list.reverse()
и listr.sort()
результат функции sorted()
можно присваивать другой переменной, так как она возвращает отсортированный список, а не None
:
classroom = ["Спортзал", "12А", "Компьютерный класс"]
sorted_classroom = sorted(classroom)
print(sorted_classroom)
# Вывод: ["12А", "Компьютерный класс", "Спортзал"]
При этом в исходном списке порядок элементов остаётся прежним:
print(classroom)
# Вывод: [12, "Компьютерный класс", 31, 10]
Однако при сортировке списка как с помощью метода list.sort()
, так и с помощью функции sort()
, важно следить за тем, чтобы все элементы сортируемого списка были одного типа данных, иначе будет вызвано исключение TypeError:
classroom = [12, "Компьютерный класс", 31, 10]
sorted_classroom = sorted(classroom)
print(sorted_classroom)
# Ошибка: TypeError: '<' not supported between instances of 'str' and 'int'
Как и метод list.sort()
функция sorted()
принимает параметры
и revers
ekey
, позволяющие задать направление сортировки и функцию, применяемую к каждому элементу.
Например, отсортируем список овощей по убыванию:
vegetables = ["Капуста", "кукуруза", "Перец", "помидор"]
print(sorted(vegetables, reverse=True))
# ['помидор', 'кукуруза', 'Перец', 'Капуста']
При сортировке в лексикографическом порядке большое значение имеет регистр букв, однако параметру key
можно передать не только функцию, но и метод, например, уже знакомый нам метод приведения строки к нижнему регистру – str.lower()
:
vegetables = ["Капуста", "кукуруза", "Перец", "помидор"]
print((sorted(vegetables, key=str.lower, reverse=True)))
# ['помидор', 'Перец', 'кукуруза', 'Капуста']
Здесь перед сортировкой строки были приведены к нижнему регистру и только потом отсортированы в лексикографическом порядке.
1. Что произойдет, если с помощью метода list.append()
добавить в список другой список?
2. Дан список статуй statues = ["Статуя Единства", "Статуя Свободы"]
. Напишите программу, которая на позицию по индексу 1
вставляет строку "Рабочий и колхозница"
и выводит результирующий список на экран.
3. Какие два метода используются для удаления элементов из списка? Чем они отличаются?
4. Дан список чисел numbers = [1, 2, 3, 4, 5]
. Напишите программу, которая удаляет элемент с индексом 2
и выводит его на экран.
5. В чем заключается отличие функции sorted()
от метода list.sort()
?
🔥 6. Напишите программу, которая запрашивает у пользователя две строки и преобразует их в списки, используя в качестве разделителя пробел. Программа должна объединить эти два списка в один и вывести на экран результирующий список, отсортированный по возрастанию длины строки.
Пример входных данных | Пример выходных данных |
---|---|
Ой! Потерялись! Эй! Ау! Ауу! |
['Ой!', 'Эй!', 'Ау!', 'Ауу!', 'Потерялись!'] |
Солнце светит так ярко. Сегодня хорошая погода | ['так', 'ярко.', 'Солнце', 'светит', 'погода', 'Сегодня', 'хорошая'] |
Купи! Ну купи! Купии слона | ['Ну', 'Купи!', 'купи!', 'Купии', 'слона'] |