Списки в Python обладают множеством встроенных методов, которые значительно упрощают работу с ними. При этом списки изменяемы, поэтому большая часть методов изменяет исходный список и возвращает None. Это отличает их от строк, для которых методы возвращают их преобразованную копию.

Добавление элемента в конец списка

Метод list.append() добавляет элемент в конец списка.

Метод

list.append(item)

Описание

Добавляет в конец списка list объект item

Параметры

  • item – объект, который нужно добавить в конец списка

Возвращаемое значение

None

Например, добавим в конец списка с одеждой новый элемент:

clothes = ["Туника", "Тога"]
clothes.append("Мантия")
print(clothes) 
# Вывод: ['Туника', 'Тога', 'Мантия']

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

clothes = ["Туника", "Тога", "Мантия"]
hats = ["Повязка", "Капюшон"]
clothes.append(hats)
print(clothes) 
# Вывод: ['Туника', 'Тога', 'Мантия', ['Повязка', 'Капюшон']]

Поэтому список hats становится вложенным списком внутри clothes.

Добавление элемента в список по индексу

Элемент можно добавить не только в конец списка, но и по определённому индексу с помощью метода list.insert().

Метод

list.insert(index, item)

Описание

Вставляет объект item в список list по индексу index

Параметры

  • index – индекс, по которому нужно вставить объект item
  • item – объект, который нужно вставить в список

Возвращаемое значение

None

Элемент, находившийся ранее по этому индексу, и все последующие элементы сдвигаются на одну позицию вправо:

meals = ["Завтрак", "Ужин"]
meals.insert(1, "Обед")
print(meals) 
# Вывод: ['Завтрак', 'Обед', 'Ужин']

Расширение списка другой коллекцией

Метод list.extend() добавляет в список все элементы другой коллекции.

Метод

list.extend(iterable)

Описание

Расширяет список list всеми элементам итерируемого объекта iterable

Параметры

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

Возвращаемое значение

None

Результат данного метода совпадает с результатом конкатенации списков, однако метод list.extend() расширяет список элементами не только другого списка, но и любой встроенной коллекции:

accessories = ["Часы", "Шарф"]
jewelry = ("Браслет", "Серьги", "Кольцо")
accessories.extend(jewelry)
print(accessories) 
# Вывод: ['Часы', 'Шарф', 'Браслет', 'Серьги', 'Кольцо']

Если в метод list.extend() передать строку, то она будет посимвольно добавлена в конец списка:

accessories = ["Часы", "Шарф", "Браслет", "Серьги", "Кольцо"]
accessories.extend("Боа")
print(accessories) 
# Вывод: ['Часы', 'Шарф', 'Браслет', 'Серьги', 'Кольцо', 'Б', 'о', 'а']

Удаление элементов списка

Элемент из списка можно удалить как по значению, так и по индексу, а также можно полностью очистить список, удалив все его элементы.

Удаление элемента из списка по значению

По значению элемент из списка удаляет метод list.remove().

Метод

list.remove(item)

Описание

Удаляет из списка list первый найденный объект item

Параметры

  • item – объект, который нужно удалить

Возвращаемое значение

None

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

gadgets = ["Компьютер", "Телефон", "Планшет", "Компьютер", "Компьютер"]
gadgets.remove("Компьютер")
print(gadgets)
# Вывод: ['Телефон', 'Планшет', 'Компьютер', 'Компьютер'] 

Но если элемент не найден, то будет вызвано исключение ValueError.

Удаление элемента из списка по индексу

По индексу элемент из списка удаляет метод list.pop(). Кроме этого, он также возвращает этот элемент.

Метод

list.pop(index=-1)

Описание

Удаляет и возвращает из списка list элемент по индексу index

Параметры

Необязательные параметры:

index – индекс элемента, который требуется удалить. По умолчанию index=-1, то есть удаляется последний элемент

Возвращаемое значение

Удаляемый элемент

Элемент, удаляемый с помощью метода 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().

Метод

list.clear()

Описание

Удаляет все элементы списка list

Возвращаемое значение

None

Тогда список станет пустым:

homework = ["Упражнение 225", "Параграф 12", "номер 126(б, г)"]
homework.clear()
print(homework)
# Вывод: []

Инверсия элементов списка

Метод list.reverse() инвертирует список, то есть изменяет порядок его элементов на противоположный. Как и другие методы списков, он модифицирует исходный список, делая первый элемент последним, второй – предпоследним и так далее.

Метод

list.reverse()

Описание

Изменяет порядок элементов списка list на обратный

Возвращаемое значение

None

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

seasons = ["Зима", "Весна", "Лето", "Осень"]
seasons.reverse()
print(seasons)
# Вывод: ['Осень', 'Лето', 'Весна', 'Зима']

# Вывод: ['Осень', 'Лето', 'Весна', 'Зима']

Если же нужно сохранить исходный список, то следует использовать функцию reversed(). Она не изменяет порядок элементов в исходной коллекции, а создаёт обратный итератор этой коллекции.

Функция

reversed(iterable)

Описание

Возвращает обратный итератор итерируемого объекта iterable

Параметры

  • iterable – итерируемый объект, который нужно перебрать в обратном порядке

Возвращаемое значение

Обратный итератор

Если итератор – это объект, который обеспечивает перебор элементов, то обратный итератор – это объект, обеспечивающий перебор элементов коллекции в обратном порядке:

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() он изменяет исходный список.

Метод

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

Описание

Сортирует элементы списка list по возрастанию или по убыванию

Параметры

Необязательные параметры:

  • key – функция, применяемая к каждому элементу списка перед сортировкой. По умолчанию key=None
  • reverse – логическое значение, определяющее направление сортировки. По умолчанию reverse=False, что означает сортировку по возрастанию

Возвращаемое значение

None

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

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(iterable, key=None, reverse=False)

Описание

Создает отсортированный список из элементов итерируемого объекта iterable

Параметры

  • iterable – итерируемый объект, который нужно отсортировать

Необязательные параметры:

  • key – функция, применяемая к каждому элементу списка перед сортировкой. По умолчанию key=None
  • reverse – логическое значение, определяющее направление сортировки. По умолчанию reverse=False, что означает сортировку по возрастанию

Возвращаемое значение

Отсортированный список

Результат функции 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() возвращает отсортированный список из элементов итерируемого объекта. Можно задать как направление сортировки, так и функцию, которая будет применяться к каждому элементу итерируемого объекта.
Методы списков

Метод

Описание

list.append(item)

Добавляет в конец списка list объект item

list.insert(index, item)

Вставляет объект item в список list по индексу index

list.extend(iterable)

Расширяет список list всеми элементам коллекции iterable

list.remove(item)

Удаляет из списка list первый найденный объект item

list.pop(index=-1)

Удаляет и возвращает из списка list элемент по индексу index

list.clear()

Удаляет все элементы списка list

list.reverse()

Изменяет порядок элементов списка list на обратный

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

Сортирует элементы списка list по возрастанию или по убыванию

Задания для самопроверки

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))