8

101 игра на python. Шпаргалки. Списковые включения (list comprehensions)

Серия Шпаргалки

Что такое списковое включение?

В самом простом виде, списковое включение – это компактный способ создания нового списка на основе уже существующего (или любого итерируемого объекта). Вместо того, чтобы использовать традиционный цикл for и добавлять элементы в список по одному, ты можешь сделать это в одну строку кода.

  • Краткость: Они позволяют писать меньше кода.

  • Читаемость: Когда ты привыкнешь к их синтаксису, ты будешь находить их более легкими для понимания, чем эквивалентные циклы for.

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

Вот базовый синтаксис спискового включения:

  • expression: Выражение, которое определяет, как будет вычисляться каждый элемент нового списка. Это может быть что угодно: простое значение, математическая операция, вызов функции.

  • item: Переменная, которая принимает значение каждого элемента из iterable по очереди.

  • iterable: Итерируемый объект, например, список, кортеж, строка или результат работы range().

Пример:

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

Без спискового включения:

Со списковым включением:

Списковое включение делает код короче и понятнее!

Добавление условия

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

  • condition: условие, которое должно выполняться для включения элемента в новый список.

Пример:

Создадим список квадратов только четных чисел из нашего исходного списка numbers.

Без спискового включения:

Со списковым включением:

Я добавил if number % 2 == 0 в списковое включение, чтобы отфильтровать только четные числа.

Многострочные списковые включения

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

Пример:

Это делает код более понятным, особенно когда у тебя есть длинные условия или сложные выражения.


Упражнения


Упражнение 1: Преобразование температур

У тебя есть список температур в градусах Цельсия, и тебе нужно преобразовать их в градусы Фаренгейта. Формула для преобразования: F = (C * 9/5) + 32.

Вот твой список температур в Цельсиях:

Задача:

  1. Используя списковое включение, создай новый список fahrenheit_temperatures, содержащий температуры из celsius_temperatures, преобразованные в градусы Фаренгейта.

  2. Выведи полученный список fahrenheit_temperatures на экран.

Подсказка:

  • Используй формулу (celsius * 9/5) + 32 в качестве выражения в списковом включении.

  • Подумай, что является iterable, а что item в данном случае.


Мое решение:

Разбор кода:

  1. celsius_temperatures = [0, 10, 20, 30, 40]: Это исходный список с температурами в градусах Цельсия.

  2. fahrenheit_temperatures = [...]: Здесь мы создаем новый список с помощью спискового включения.

  3. (celsius * 9/5) + 32: Это выражение, которое выполняется для каждого элемента. Оно преобразует температуру из Цельсия в Фаренгейт.

  4. for celsius in celsius_temperatures: Это часть спискового включения, которая перебирает каждый элемент в списке celsius_temperatures, присваивая его значение переменной celsius на каждой итерации.

  5. print(fahrenheit_temperatures): Выводит полученный список температур в Фаренгейтах.

Важно отметить:

  • В данном случае, celsius_temperatures является iterable, а celsius — item.

  • Я использую многострочное форматирование спискового включения для повышения читаемости кода.

  • Внутри выражения я напрямую применяю формулу преобразования, используя текущее значение celsius.


Упражнение 2: Фильтрация и преобразование строк

У тебя есть список слов, и тебе нужно сделать следующее:

  1. Отфильтровать слова, которые начинаются с буквы "a" (регистр не важен).

  2. Преобразовать все оставшиеся слова в верхний регистр.

Вот твой список слов:

Задача:

  1. Используя списковое включение, создай новый список transformed_words, содержащий только те слова из списка words, которые не начинаются с буквы "a" (или "A"), и при этом преобразованные в верхний регистр.

  2. Выведи полученный список transformed_words на экран.

Подсказки:

  • Используй метод строки startswith() для проверки, начинается ли слово с определенной буквы. Не забудь про регистр! Приведи все к нижнему регистру.

  • Используй метод строки upper() для преобразования строки в верхний регистр.

  • Подумай о порядке операций. Сначала фильтруем, потом преобразуем.

    Мое решение:


Упражнение 3: Создание словаря из списка кортежей

У тебя есть список кортежей, где каждый кортеж содержит два элемента: имя и возраст человека.

Задача:

  1. Используя списковое включение, создай словарь people_dict, где ключами будут имена людей, а значениями — их возраст.

  2. Выведи словарь people_dict на экран.

Подсказки:

  • Списковые включения создают списки, но их можно использовать для создания списков кортежей, которые затем можно передать в конструктор dict().

  • Подумай, как извлечь имя и возраст из каждого кортежа.

  • Помни, что словарь — это структура данных, которая хранит пары ключ-значение.

Немного объяснения:

В Python можно создать словарь из списка кортежей, где каждый кортеж состоит из двух элементов (ключ, значение). Для этого я использую конструктор dict(). Например:

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


Мое решение:

Разбор кода:

  1. people_data = [...]: Это исходный список кортежей, где каждый кортеж содержит имя и возраст человека.

  2. people_dict = dict(...): Мы используем конструктор dict(), чтобы создать словарь из списка кортежей.

  3. [ (name, age) for name, age in people_data ]: Это списковое включение, которое создает список кортежей.

    • (name, age): Это выражение создает кортеж из двух элементов: name и age.

    • for name, age in people_data: Это часть перебирает все кортежи из списка people_data. На каждой итерации кортеж распаковывается на две переменные: name и age.

  4. print(people_dict): Выводит созданный словарь.

Ключевые моменты:

  • Списковое включение создает список кортежей.

  • Конструктор dict() преобразует список кортежей в словарь, используя первый элемент кортежа в качестве ключа, а второй - в качестве значения.

  • Распаковка кортежей в цикле for name, age in people_data делает код более читабельным.

  • Списковое включение в этом примере используется для подготовки данных для словаря.

GIT


Другие шпаргалки:


Структуры данныx python
Переменные
Строки
Функции

Когда использовать dict и list
dict vs SimpleNamespace
Синглтон (Singleton)
dataclass

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества