Генераторы множеств (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'}
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *