В этой статье мы рассмотрим способ улучшения производительности и читаемости кода в Python с помощью так называемых list comprehensions (предоставление списков). Конкретно, мы разберем задачу, где мы увеличиваем цены на лекарства в зависимости от процентного повышения, ввода пользователя и демонстрацию, как это можно сделать более лаконично и элегантно с использованием list comprehensions.
Описание задачи
Мы хотим вычислить новые цены на лекарства, основываясь на процентных изменениях, введенных пользователем. У нас уже есть ведущий список цен, и нам нужно создать новые списки для каждого квартала (2 и 3 кварталов), учитывая повышение цен.
Код программы
Тот же код ниже для копирования и вставки в программу. Не забывайте про необходимый отступ пробелами в определённых местах в начале строки, так как код на сервере блога может отображаться некорректно.
def cost_increase(percent, price):
return round(price * (1 + percent / 100), 2)
prices_now = [159.42, 566.28, 1002.25, 644.56, 120.58]
second_percent = int(input('Повышение цены на лекарство во второй квартал: '))
third_percent = int(input('Повышение цены на лекарство в третий квартал: '))
prices_second_quarter = [cost_increase(second_percent, i_prices) for i_prices in prices_now]
prices_third_quarter = [cost_increase(third_percent, i_prices) for i_prices in prices_second_quarter]
print('Сумма цен за каждый второй и третий квартал: ', round(sum(prices_now), 2), round(sum(prices_second_quarter), 2), round(sum(prices_third_quarter), 2))
Построчный подробный разбор кода
def cost_increase(percent, price): # Простая функция с передачей процента (percent) и цены (price)
return round(price * (1 + percent / 100), 2) # Возвращаем процент с округлением цены до копеек
- Определяем функцию cost_increase, которая принимает два аргумента: percent и price.
- Функция возвращает цену, увеличенную на указанный процент, с округлением до двух знаков после запятой.
prices_now = [159.42, 566.28, 1002.25, 644.56, 120.58]
- Создаем список prices_now, который содержит текущие цены на лекарства.
second_percent = int(input('Повышение цены на лекарство во второй квартал: ')) # Запрос у пользователя прогнозируемое повышение цены в процентах в следующем (втором) квартале
third_percent = int(input('Повышение цены на лекарство в третий квартал: ')) # Запрос у пользователя прогнозируемое повышение цены в процентах в следующем за вторым (третьем) квартале
- Запрашиваем у пользователя прогнозируемое повышение цен в процентах для второго и третьего кварталов, преобразуем ввод в целые числа.
prices_second_quarter = [cost_increase(second_percent, i_prices) for i_prices in prices_now] # Генерация списка цен за 2 квартал. После "=" идёт expression (Выражение). Выражение определяет каким действием мы будем заполнять список. Здесь может быть любое вычисление, либо любое допустимое выражение, которое возвращает значение. В нашем случае это функция, которая будет передавать цену (значение). Она будет передавать уже подсчитанный результат. В качестве аргумента мы будем передавать сам процент (i_prices) и переменную цикла, которая используется для прохождения по списку (prices_now). И далее идёт процесс генерации нашего нового цикла.
- Используем list comprehension для генерации списка новых цен prices_second_quarter, применяя функцию cost_increase к каждой цене из списка prices_now с учетом процента.
prices_third_quarter = [cost_increase(third_percent, i_prices) for i_prices in prices_second_quarter] # Генерация нового списка цен за 3 квартал не забывая о том что генерация пойдёт уже по новому списку.
- Аналогично, создаем список prices_third_quarter с новыми ценами, увеличенными на новый процент, теперь уже используя список цен второго квартала.
print('Сумма цен за каждый второй и третий квартал: ', round(sum(prices_now), 2), round(sum(prices_second_quarter), 2), round(sum(prices_third_quarter), 2)) # Сумма элементов каждого списка в одну строку. Функция sum - сумма цен за каждый квартал. round округляет цены до двух знаков после запятой
- Выводим суммы цен за каждый квартал, округляя их до двух знаков после запятой.
Результат работы кода:
Заключение
Использование list comprehensions в Python упрощает код, делает его более читаемым и часто более производительным. То есть такой код ускоряет работу компьютера и имеет более эстетично красивый код. Вместо традиционного цикла for, который занимает лишние строки кода, мы можем с легкостью выразить ту же логику в одной строке. Это особенно полезно при работе с большими данными.
Рекомендации по усовершенствованию кода
- Обработка ошибок: Добавить обработку ошибок на случай некорректного ввода, чтобы избежать сбоев программы.
- Использование NumPy: Если список цен будет значительным, можно рассмотреть использование библиотеки NumPy для повышения производительности при выполнении операций с массивами.
- Создание функций: Выделить отдельные функции для более сложных шагов анализа данных, такие как вычисление сумм, чтобы упростить основной код.
- Документация: Добавить комментарии или документацию к функциям для лучшего понимания кода другими разработчиками.
В целом, освоение list comprehensions — это мощный инструмент, который поможет сделать ваш код более чистым и эффективным.
ПОЛЕЗНЫЕ РЕСУРСЫ:
---------------------------------------------------
Сообщество дизайнеров в VK
https://vk.com/grafantonkozlov
Телеграмм канал сообщества
https://t.me/grafantonkozlov
Архив эксклюзивного контента
https://boosty.to/antonkzv
Канал на Дзен
https://dzen.ru/grafantonkozlov
---------------------------------------------------
Бесплатный Хостинг и доменное имя
https://tilda.cc/?r=4159746
Мощная и надежная нейронная сеть Gerwin AI
https://t.me/GerwinPromoBot?start=referrer_3CKSERJX
GPTs — плагины и ассистенты для ChatGPT на русском языке
https://gptunnel.ru/?ref=Anton
---------------------------------------------------