Фильтрация и удаление дубликатов последовательности с помощью Set comprehension

Опубликован: 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()

Комментариев нет.