Опубликован: 14.12.2023 51
Генератор множеств (Set comprehension
) - также как и генераторы списков (List comprehension
) и генераторы словарей (Dict comprehension
) - простой и элегантный способ создания множеств из других итерируемых объектов (списки, кортежи, словари, строки и другие множества) в Pythonic стиле.
Создание множеств с помощью Set comprehension
имеет простой, лаконичный синтаксис генерации неупорядоченного набора уникальных элементов (буквально одной строкой кода) и работает быстрее, чем традиционный способ на основе цикла for
.
Синтаксис: { expression for item in iterable if condition
}
expression
— математическое выражение или функция, использующие в качестве аргумента элемент item
исходной итерируемой последовательности iterable
;iterable
— исходный итерируемый объект для создания множества (список, кортеж, словарь, строка, другое множество);condition
— условное выражение (необязательная часть генератора), используемое для фильтрации элементов, включаемых в создаваемое множество.Если требуется не просто отфильтровать или изменить исходный итерируемый объект, но и одновременно устранить дубликаты в результирующем наборе данных, то можно воспользоваться Set comprehension
, который создаст множество из уникальных элементов исходного объекта.
# исходный список целых чисел
my_list = [ 3, 5, 15, 35, 58, 3, 5, 35, 58, 9, 8 ]
# создание множества из списка чисел > 25
myset = { x for x in my_list if x > 25 }
print(myset)
{58, 35}
# создание множества положительных значений из списка чисел уменьшенных на 10
myset = { x - 10 for x in my_list if (x - 10) > 0 }
print(myset)
{48, 25, 5}
# исходное множество тегов
tags = { "Django", "Pandas", "Numpy", "Requests", "Scrapy" }
# создание множества тэгов в нижнем регистре с исключением тэга "Requests"
new_tags = { tag.lower() for tag in tags if tag != "Requests" }
print(new_tags)
{'scrapy', 'pandas', 'django', 'numpy'}
# исходный текст
text = "Python самый популярный язык программирования в мире"
# создание множества из букв, используемых в тексте
letters = { letter for letter in text if letter != " "}
print(letters)
{'ы', 'н', 'n', 'п', 'и', 'л', 'з', 'р', 'в', 'к', 'y', 'o', 'е', 'с', 'я', 'м', 'P', 'г', 'й', 'у', 'о', 'h', 'а', 't'}
Таким образом, Set comprehension
можно использовать как способ быстрого и элегантного создания множества на базе исходного итерируемого объекта, если требуется не только фильтрация или изменение исходного объекта, но и удаление возможных дубликатов.
Методы преобразования списка в строку и обратно
Фильтрация элементов итератора с помощью bool-списка функции itertools.compress()
Пропуск не нужных элементов последовательности с помощью itertools.dropwhile()
Комментариев нет.