Найти в Дзене
1001 строк кода

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

В самом простом виде, списковое включение – это компактный способ создания нового списка на основе уже существующего (или любого итерируемого объекта). Вместо того, чтобы использовать традиционный цикл for и добавлять элементы в список по одному, ты можешь сделать это в одну строку кода. Вот базовый синтаксис спискового включения: Пример: Предположим, у тебя есть список чисел, и ты хочешь создать новый список, содержащий квадраты этих чисел. Без спискового включения: Со списковым включением: Списковое включение делает код короче и понятнее! Добавление условия Списковые включения также позволяют тебе добавлять условия для выбора элементов, которые будут включены в новый список. Пример: Создадим список квадратов только четных чисел из нашего исходного списка numbers. Без спискового включения: Со списковым включением: Я добавил if number % 2 == 0 в списковое включение, чтобы отфильтровать только четные числа. Многострочные списковые включения Когда списковые включения становятся сложнее
Оглавление

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

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

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

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

-2
  • expression: Выражение, которое определяет, как будет вычисляться каждый элемент нового списка. Это может быть что угодно: простое значение, математическая операция, вызов функции.
  • item: Переменная, которая принимает значение каждого элемента из iterable по очереди.
  • iterable: Итерируемый объект, например, список, кортеж, строка или результат работы range().

Пример:

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

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

-3

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

-4

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

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

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

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

Пример:

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

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

-6

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

-7

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

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

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

Пример:

-8

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

Упражнения

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

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

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

-9

Задача:

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

Подсказка:

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

Мое решение:

-10

Разбор кода:

  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. Преобразовать все оставшиеся слова в верхний регистр.

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

-11

Задача:

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

Подсказки:

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

Мое решение:

-12

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

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

-13

Задача:

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

Подсказки:

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

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

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

-14

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

Мое решение:

-15

Разбор кода:

  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