Генераторы множеств (set comprehension) в Python
В этом уроке вы узнаете, как использовать генераторы множеств (set comprehension) в Python для создания нового множества на основе существующего.
Что такое генераторы множеств в Python?
Предположим, что у вас есть следующее множество, состоящий из трех тегов:
tags = {'Django', 'Pandas', 'Numpy'}
Чтобы преобразовать теги в наборе в другое множество тегов в нижнем регистре, вы можете использовать следующий цикл for:
tags = {'Django', 'Pandas', 'Numpy'} lowercase_tags = set() for tag in tags: lowercase_tags.add(tag.lower()) print(lowercase_tags)
Выход:
{'django', 'numpy', 'pandas'}
Как это работает:
- Сначала переберите каждый элемент набора тегов.
- Во-вторых, преобразуйте каждый тег в нижний регистр и добавьте новое множество (lowercase_tags).
Или вы можете использовать встроенную функцию map() с лямбда-выражением:
tags = {'Django', 'Pandas', 'Numpy'} lowercase_tags = set(map(lambda tag: tag.lower(), tags)) print(lowercase_tags)
Функция map() возвращает map-объект, поэтому вам нужно использовать функцию set(), чтобы преобразовать его в множество.
Чтобы сделать код более кратким, Python предоставляет вам следующий синтаксис определения множеств:
{expression for element in set if condition}
Генератор множеств позволяет вам создать новое множество на основе существующего. Он включает в себя следующие шаги:
- Сначала перебираем элементы множества.
- Во-вторых, применим выражение к каждому элементу.
- В-третьих, создадим новое множество элементов, являющихся результатом выражения.
Кроме того, генератор множеств позволяет вам выбрать, к какому элементу применить выражение, с помощью условия в предложении if. Обратите внимание, что генератор множества возвращает новое множество не изменяя исходного.
Возвращаясь к предыдущему примеру, вы можете преобразовать все теги в наборе тегов, используя следующий генератор множества:
tags = {'Django', 'Pandas', 'Numpy'} lowercase_tags = {tag.lower() for tag in tags} print(lowercase_tags)
Этот синтаксис определенно выглядит более лаконичным, чем цикл for, и более элегантным, чем функция map().
Генератор множества с оператором if в Python
Предположим, вы хотите преобразовать все элементы тегов в нижний регистр, за исключением Numpy.
Для этого вы можете добавить условие if к set comprehension следующим образом:
tags = {'Django', 'Pandas', 'Numpy'} new_tags = {tag.lower() for tag in tags if tag != 'Numpy'} print(new_tags)
Выход:
{'django', 'pandas'}