Доброго времени суток, всем читающим данную статью!
Сегодня я хочу разобрать с вами такую вещь как "списковое включение" и его использование в языке программирования Python.
Списковое включение - это способ компактного описания операций обработки списков. Ну а если быть более точным, с помощью спискового включения можно обработать любой итерируемый объект. Сам способ можно по праву отнести к синтаксическому сахару, которым так славиться Python.
И так, дамы и господа, давайте ближе к делу! Рассмотрим данную функциональность на конкретном примере. Представим себе, что мы имеем список чисел от 1 до 10, и перед нами стоит задача получить новый список, состоящий из элементов первого списка возведенных в квадрат.
Первое что может прийти в голову, это воспользоваться классическим циклом for.
Да, это сработает и в переменной result по окончанию выполнения программы нас будет ждать ожидаемый результат:
Однако, это решение трудно назвать "Питонячим". Хочется чего-то более изящного и простого. На помощь приходит списочное включение:
Я дам вам несколько минут, насладиться силой этого "однострочника"...
Когда я первый раз столкнулся с этой конструкцией, она меня очень сильно впечатлила и с тех пор плотно вошла обиход.
Давайте же разбираться как она работает и как нам научиться писать собственные "списковые включения".
Рецепт на самом деле крайне прост:
новый список - имя переменной, которая будет ссылаться на результат выполнения спискового включения.
операция - любая операция над элементом перебираемой последовательности, либо сам элемент.
элемент - произвольное название переменной, которое будет указывать на элемент перебираемой последовательности.
список - любой итерируемый объект.
Согласитесь, здесь нет ничего сложного.
А теперь хотите новость "бомбу"? Не смотря на наличие в названии слова "списковое", данная конструкция позволяет создавать и обрабатывать не только списки. Результатом спискового включения так же могут быть:
- Множества (set)
- Словари (dict)
Ровно как и перебираемый объект не обязательно должен быть списком. В принципе мы можем обработать любой итерируемый объект:
- Строку (str)
- Множество (set)
- Словарь (dict)
- Кортеж (tuple)
Вы думали, что мы на этом закончили? Как бы не так.
Зачастую нам нет нужды обрабатывать все элементы последовательности. Гораздо чаще нас интересуют конкретные элементы или элементы удовлетворяющие какому-либо условию. Списочные включения позволяют это сделать.
Давайте добавим новые вводные в нашу исходную задачу с возведением чисел в квадрат. Предположим, что мы хотим возвести в квадрат только чётные числа.
Таким образом операция возведения в квадрат (num**2) будет применена только к тем числам, которые при делении на 2 не имеют остатка (num%2 == 0) т.е. являются четными.
Не четные числа будут пропущены.
Давайте дополним нашу памятку условием if:
Ну и в довершение, "игрушечный" пример применения.
Мы хотим провести акцию в нашем магазинчике и сделать скидку 25% на все товары, стоимость которых больше или равна 200 тугриков.
В результате выполнения данного списочного включения, в переменной discounted_products мы получим новый словарь, содержащий название товара и его новую стоимость. А если быть точным:
- Apple - 150.0
- Banana - 187.5
Благодарю вас за внимание, надеюсь данная статья была полезна для вас!