Вспоминаю тот день, когда с ними познакомился. Для меня было необычным лицезреть на гитхабе создание списков и словарей в цикле в одну строку. Немного другая архитектура построения... Скобки спереди.
И у меня есть четкое убеждение того, что когда вы смотрите код этого канала, то тоже можете приходить в некоторое замешательство. Давайте это исправим.
Что такое генераторы списков и словарей?
Это код, окантованный в квадратные или фигурные скобки, генерирующий значения с обработкой или без, последовательно дополняя создаваемый контейнер данных. Если в квадратных скобках - список или список списков, а в фигурных получится словарь.
Их также называют выражение-генераторы Python, так как для получения заполненного контейнера данных в теле указано выражение для их получения.
Пример того, как я делал ранее:
Задача: Забрать имена коллег, хранящихся в словарике и перенести в отдельный список.
На пальчиках:
1. Мы создаем пустой список, в который будут помещаться имена
2. Формируется цикл, который говорит дословно:
Для каждого имени (name) в списке ключей словаря(dict.keys()) произведи операцию - возьми имя и добавь в конец списка sample_list.
3. По окончании ключей в словаре (имен коллег) цикл завершится, а содержимое словаря мы распечатаем.
Через выражение-генератор это выглядит так:
1. Добавь имя в список sample_list для каждого имени в списке ключей словаря(dict.keys())
2. Распечатай сформированный список.
Мы избавились от строки объявления пустого словаря, а также от строкового метода добавления в список append(). Размер основного кода-цикла стал меньше, умещаясь в одну строку.
Кстати всё, что находится в скобках можно разнести на несколько строк. Это приятная особенность Python, позволяющая распределить более длинный код и сохранить удобочитаемость.
Получить словарь на основе генератора также просто. Только код будет размещаться не в квадратных скобках, а фигурных. Также следуя терминологии словаря добавляемым элементом будет пара ключ-значение.
Давайте попробуем по аналогии с первым примером сделать вариант через простой цикл и через однострочное выражение. Составим из списка полезных продуктов кодера словарь :-) :
Идентично, но через выражение-генератор:
Принцип тот же, но немного иное назначение элемента в контейнер.
Опять без строки объявления. Код чистый и опрятный.
При этом для prod[0] и prod[1] можно сделать любые манипуляции прямо в строке-выражении.
Например:
названия продуктов сделать большенькими ;
И
убрать рубли в ценовом значении ;
И
привести строку цены к целому числу:
Надеюсь в определенный момент изучения языка программирования этот пост вам пригодится.
Подписывайтесь, ставьте лайки. Я очень надеюсь на долгосрочное развитие этого канала. Мне важен любой комментарий, совет или наставление. Мира вам :-)