Загружаем изображение…
💡 Изобретаем свои Comprehensions в Python

Многие знают о list, set и dict comprehensions. Но что, если вам нужен tuple comprehension или frozenset comprehension? В синтаксисе Python их не существует, но мы можем их имитировать.

Главный секрет: Генераторные выражения

Генераторные выражения (generator expressions) — это «строительные блоки», которые позволяют создавать итерируемые объекты на лету без выделения памяти под весь список.

Как это работает:
Если передать генераторное выражение в функцию как единственный аргумент, лишние скобки можно опустить:


# Вместо этого:
all((n > 1 for n in numbers))
# Пишем так:
all(n > 1 for n in numbers)



🛠 Примеры «кастомных» включений

1. Tuple Comprehension

Формально его нет, но передача генератора в конструктор tuple() дает тот же результат:


>>> numbers = [2, 1, 3, 4, 7]
>>> tuple(n**2 for n in numbers)
(4, 1, 9, 16, 49)



2. Frozenset Comprehension

Если вам нужен неизменяемый (immutable) сет:


>>> word_fset = frozenset(w.lower() for w in ["Apple", "Orange", "Apple"])
frozenset({'apple', 'orange'})



3. Counter Comprehension

Класс Counter из модуля collections идеально сочетается с генераторами для быстрого подсчета объектов:


from collections import Counter
words = Counter(w.strip() for w in text.split())



📉 Агрегация через Reducer-функции

Генераторные выражения отлично работают с функциями, которые «сворачивают» (reduce) итерируемый объект в одно значение:
— sum(n**2 for n in numbers) — сумма квадратов.
— "".join(str(n) for n in numbers) — конкатенация строк.
— math.prod(n for n in numbers) — произведение элементов.
Просмотры: 34
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти