Найти в Дзене
MakeBetter[Code] Blog

[📕] Знакомство со Списковыми Включениями (List Comprehensions) | Особенности Python

Оглавление

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

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

Небольшой пример (без фильтрации)

-2

В этом примере с помощью спискового включения [x**2 for x in range(1, 11)] создается новый список квадратов чисел от 1 до 10.

Выражение x**2 (возвести x в степень 2) выполняется для каждого значения x в диапазоне от 1 до 10, и полученные значения добавляются в новый список.

Полученный список присваивается переменной squares и выводится на печать.

Зачем?

Списковые включения в Python полезны во многих ситуациях, когда необходимо создать новый список на основе значений существующего списка или другой итерируемой переменной. Приведем несколько распространенных случаев их использования:

  1. Фильтрация элементов: С помощью списковых включений можно создать новый список, содержащий только те элементы, которые удовлетворяют определенному условию. Например, вы можете создать новый список четных чисел из существующего списка целых чисел; или создать новый список, содержащий строки длиной больше или меньше заданной величины из списка строк.
  2. Маппинг элементов: Вы можете использовать списковые включения для применения функции к каждому элементу существующего списка и создания нового списка с результатами. Пример подобного применения спискового включения вы видели в начале статьи, где мы применили выражение x**2 к каждому элементу исходного списка.
  3. Объединение элементов: Используя списковые включения, можно создать новый список, объединяющий элементы из двух или более существующих списков. Например, вы можете создать новый список кортежей, содержащий элементы из двух существующих списков. (см. ниже)
  4. Сплющивание вложенных списков: Вы можете использовать списковые включения для сглаживания вложенного списка в один список. Например, можно создать новый список, содержащий все элементы из вложенного списка списков. (см. ниже)
  5. Создание словарей или наборов: Посредством списковых включений можно создать новый словарь или набор на основе элементов существующего списка. Так, можно создать новый словарь, который сопоставляет элементы существующего списка с их квадратами. (см. ниже)

Примеры

Объединение элементов:

-3

В этом примере у нас есть два существующих списка list1 и list2. Мы используем списковое включение для создания нового списка combined_list, который содержит кортежи элементов из обоих списков. Полученный список содержит все возможные комбинации элементов из двух списков.

Сплющивание вложенных списков:

-4

В этом примере у нас есть вложенный список [[1, 2, 3], [4, 5], [6, 7, 8, 9]]. Мы используем списковое включение для итерации по каждому подсписку во вложенном списке, и для каждого подсписка мы итерируем каждый элемент и добавляем его в новый список flat_list. В результате все элементы из вложенного списка содержатся в едином списке flat_list.

Создание словарей или наборов:

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

-5

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

Слабые места списковых включений

Списковые включения в Python обычно считаются действенным и лаконичным способом создания новых списков на основе существующих. Тем не менее, существуют некоторые отрицательные стороны применения списковых включений, о которых следует помнить:

  1. Читабельность: Списковые включения иногда могут быть менее читабельными, чем эквивалентный код, написанный с использованием циклов или других конструкций. Это особенно актуально для сложных списковых включений, включающих несколько условий или вложенных циклов. (см. ниже).
  2. Использование памяти: Списковые включения могут занимать много памяти, особенно для больших списков. Это связано с тем, что они создают новый список в памяти для каждого вызова, что может привести к проблемам с производительностью, если список очень большой.
  3. Возможности отладки: Списковые включения может быть сложнее отлаживать, чем эквивалентный код, написанный с использованием циклов или других элементов. Это связано с тем, что они представляют собой одну строку кода, которую трудно разбить на части и проанализировать, когда что-то идет не так.

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

Пример плохочитабельного спискового включения

Стоит отметить, что пользователю подсказали как упростить данное выражение, но результат все еще менее читаем, чем эквивалентное выражение с использованием цикла.
Стоит отметить, что пользователю подсказали как упростить данное выражение, но результат все еще менее читаем, чем эквивалентное выражение с использованием цикла.

🎉✨ Поздравляю с завершением чтения статьи

Если Вам понравилось, можете подписаться, оставить комментарий и поставить лайк.

Также, можете взглянуть на некоторые из моих других публикаций, чтобы найти еще больше отличного контента 🔥:

[🧿] Изменяемые и неизменяемые объекты | Особенности Python
MB Magazine30 марта 2023
[🗄] Структуры Данных в Python - Почему об этом Важно Знать
MB Magazine30 марта 2023
[🏗] Популярные Архитектуры Программирования | Обзор
MB Magazine28 марта 2023