Найти тему
Каждодневье

Однострочные генераторы списков и словарей в Python.

Вспоминаю тот день, когда с ними познакомился. Для меня было необычным лицезреть на гитхабе создание списков и словарей в цикле в одну строку. Немного другая архитектура построения... Скобки спереди.

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

Что такое генераторы списков и словарей?

Это код, окантованный в квадратные или фигурные скобки, генерирующий значения с обработкой или без, последовательно дополняя создаваемый контейнер данных. Если в квадратных скобках - список или список списков, а в фигурных получится словарь.

Их также называют выражение-генераторы Python, так как для получения заполненного контейнера данных в теле указано выражение для их получения.

Пример того, как я делал ранее:

Задача: Забрать имена коллег, хранящихся в словарике и перенести в отдельный список.

Стандартное расширение списка за счет работы цикла
Стандартное расширение списка за счет работы цикла

На пальчиках:

1. Мы создаем пустой список, в который будут помещаться имена

2. Формируется цикл, который говорит дословно:
Для каждого имени (name) в списке ключей словаря(dict.keys()) произведи операцию - возьми имя и добавь в конец списка sample_list.
3. По окончании ключей в словаре (имен коллег) цикл завершится, а содержимое словаря мы распечатаем.

Через выражение-генератор это выглядит так:

Пример работы выражение-генератора списка.
Пример работы выражение-генератора списка.

1. Добавь имя в список sample_list для каждого имени в списке ключей словаря(dict.keys())

2. Распечатай сформированный список.

Мы избавились от строки объявления пустого словаря, а также от строкового метода добавления в список append(). Размер основного кода-цикла стал меньше, умещаясь в одну строку.

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

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

Давайте попробуем по аналогии с первым примером сделать вариант через простой цикл и через однострочное выражение. Составим из списка полезных продуктов кодера словарь :-) :

Словарь через прогон списка списков в цикле с записью новой пары
Словарь через прогон списка списков в цикле с записью новой пары

Идентично, но через выражение-генератор:

Cловарь через выражение.
Cловарь через выражение.

Принцип тот же, но немного иное назначение элемента в контейнер.
Опять без строки объявления. Код чистый и опрятный.

При этом для prod[0] и prod[1] можно сделать любые манипуляции прямо в строке-выражении.

Например:
названия продуктов сделать большенькими ;
И
убрать рубли в ценовом значении ;
И
привести строку цены к целому числу:

-5

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

Подписывайтесь, ставьте лайки. Я очень надеюсь на долгосрочное развитие этого канала. Мне важен любой комментарий, совет или наставление. Мира вам :-)