Введение в Python. Часть 10. Генераторы списков
Как сократить свой код до одной строчки
На позапрошлом уроке мы узнали, как работать со списками в Python. Теперь изучим, как можно создавать списки более быстрым и красивым с точки зрения синтаксиса способом.
Для решения одной практической задачи, нам нужно создать список с годами с 2000 по 2019. Мы можем сделать это так:
Помним, что по правилам срезов в Питоне к последнему элементу нужно прибавлять +1.
Нам понадобилось написать три строчки кода, чтобы решить эту задачи. Но можно сделать тоже самое с помощью одной строки. Для этого мы будем использовать то, что в Python называется List comprehensions, а по-русски их называют списковыми включениями или генераторами списков.
Строка, которую мы написали, и есть генератор списка. Заключается она в квадратные скобки: так мы всегда создаем списки. Первая часть — это, что мы делаем с элементом. В данном случае мы его просто добавляем в список. Но могли бы, например, еще удвоить:
Дальше повторяем наш элемент, с которым работаем, и указываем, откуда мы его берем: то есть прописываем одной строкой весь цикл for с функцией range.
Давайте поработаем теперь с реальными данными. Возьмем с сайта федеральной службы государственной статистики данные о количестве населения в России, которое живет за чертой прожиточного минимума — то есть количество бедного населения. Доступные года за 21 век есть с 2001 по 2019. С сайта можно скачать таблицу в формате эксель. Пока мы перенесем вручную нужные там данные. А на следующем уроке расскажем, как работать с файлами на вашем компьютере в Python.
Теперь у нас есть список с годами, который мы создали ранее, и список с количеством бедных россиян в миллионах человек. Логично будет сделать из этих данных словарь. Мы уже с вами учили функцию zip, давайте используем ее и генератор словарей для создания словаря.
Генераторы словарей это по сути то же самое, что и генераторы списков, только, во –первых, мы используем фигурные скобочки для их создания, а не квадратные (так как для создания словарей всегда используются фигурные). А, во вторых, добавляем двоеточие после первого элемента, который будет ключем словаря.
Смотреть на количество человек за чертой бедности в абсолютных значения не совсем корректно. Ведь численность населения в разные года была разная. Поэтому для того, чтобы сравнить уровень бедности в России по годам, нам нужно узнать процентное соотношение бедных к численности населения. Для этого с сайта Федстата мы берем данные о населении также в миллионах человек.
И считаем уровень бедности в процентах одной строкой.
Теперь нам стоит округлить числа, но не до целого, а с десятичными. Чтобы мы могли видеть разницу между годами. Используем функцию round. Ей нужно отдать в скобках само число и через запятую, если нужно, количество знаков, которое оставляем после запятой. Используем генераторы списков для этого.
Давайте сравним, сколько нам понадобилось строчек кода для этих подсчетов без генераторов списков.