JavaRush /Курсы /Модуль 1: Python Core /Получение подмножества

Получение подмножества

Модуль 1: Python Core
6 уровень , 3 лекция
Открыта

4.1 Получение подмножества по правилу

Подмножество — это множество, все элементы которого принадлежат другому, большему множеству. В Python есть несколько встроенных методов и операторов для работы с подмножествами. Ниже я расскажу, как получить подмножества, как проверить, является ли одно множество подмножеством другого, и как использовать эти знания в различных сценариях.

Использование цикла for

Вы можете создать пустое множество и добавлять в него элементы, удовлетворяющие условию, с помощью цикла for.


my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_set = set()
            
for x in my_set:
    if x % 2 == 0:
        even_set.add(x)
            
print(even_set)  # Вывод: {2, 4, 6, 8, 10}
        

Это самый простой и очевидный способ создать подмножество. Но есть еще несколько других и более компактных.

Использование функции filter()

Функцияfilter() применяет функцию к каждому элементу и возвращает только те элементы, для которых функция вернула True. Результат необходимо преобразовать обратно в множество.


my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_set = set(filter(lambda x: x % 2 == 0, my_set))
print(even_set)  # Вывод: {2, 4, 6, 8, 10}
        

Внутри функции filter() используется лямбда-выражение – это такой короткий способ задать служебную функцию или правило для фильтрации. О лямбдах я расскажу буквально через несколько лекций.

4.2 Использование генераторов множеств

Помните List Comprehension? Когда мы в квадратных скобках задавали быстрый способ генерации списка и его элементов? Этот синтаксический инструмент имел такой вид:


[выражение for переменная in последовательность]

Где:

  • переменная — идентификатор некоторой переменной,
  • последовательность — последовательность значений, которые принимает данная переменная (это может быть список, строка или объект, полученный при помощи функции range),
  • выражение — некоторое выражение, как правило, зависящее от использованной в генераторе переменной, которым будут заполнены элементы списка.

Для множеств есть аналогичная функция, только нужно использовать фигурные скобки:


{выражение for переменная in последовательность}

Генераторы множеств позволяют легко и лаконично создавать новые множества на основе существующих, применяя условия фильтрации.

Вот так можно отобрать только четные элементы из множества:


my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
even_set = {x for x in my_set if x % 2 == 0} 
print(even_set)  # Вывод: {2, 4, 6, 8, 10} 

А вот так только строки:


my_set = {1, 2, 3, 4, 5, 6, 7, 8, 9, "apple", "banana"}
even_set = {x for x in my_set if type(x) == str}
print(even_set)  # Вывод: {"apple", "banana"}

4.3 Проверка наличия элемента

Одной из основных операций, которые можно выполнять с множествами, является проверка наличия элемента в множестве. В Python существует несколько способов сделать это. Давайте рассмотрим различные методы проверки, что элемент присутствует в множестве.

Использование оператора in

Наиболее распространенный и удобный способ проверки наличия элемента в множестве — это использование оператора in. Этот метод возвращает True, если элемент присутствует в множестве, и False в противном случае.


my_set = {1, 2, 3, 4, 5}
print(3 in my_set)  # Вывод: True
print(6 in my_set)  # Вывод: False
            

Использование оператора not in

Оператор not in является противоположностью оператора in и используется для проверки, что элемент отсутствует в множестве. Он возвращает True, если элемент не присутствует в множестве, и False в противном случае.


my_set = {1, 2, 3, 4, 5}
print(6 not in my_set)  # Вывод: True
print(3 not in my_set)  # Вывод: False

Использование циклов

Хотя использование циклов для проверки наличия элемента в множестве не является наиболее эффективным способом, он может быть полезен в ситуациях, когда вы работаете с более сложными структурами данных или выполняете дополнительные операции.


my_set = {1, 2, 3, 4, 5}
element = 3
found = False
            
for item in my_set:
    if item == element:
        found = True
        break
            
print(found)  # Вывод: True
        

4.4 Проверка вложенности множеств

Python предоставляет оператор <= и метод issubset() для проверки, является ли одно множество подмножеством другого.

Использование оператора <=

Оператор <= позволяет легко проверить, является ли одно множество подмножеством другого.


set_a = {1, 2, 3}
set_b = {1, 2, 3, 4, 5}
            
print(set_a <= set_b)  # Вывод: True
print(set_b <= set_a)  # Вывод: False
            
        

Использование метода issubset()

Метод issubset() выполняет ту же функцию, что и оператор <=, и возвращает True, если все элементы одного множества содержатся в другом.


set_a = {1, 2, 3}
set_b = {1, 2, 3, 4, 5}
            
print(set_a.issubset(set_b))  # Вывод: True
print(set_b.issubset(set_a))  # Вывод: False
        

Проверка на надмножество

Аналогично подмножествам, вы можете проверить, является ли одно множество надмножеством другого, используя оператор >= и метод issuperset().

Использование оператора >=


set_a = {1, 2, 3, 4, 5}
set_b = {1, 2, 3}
            
print(set_a >= set_b)  # Вывод: True
print(set_b >= set_a)  # Вывод: False
            
        

Использование метода issuperset()


set_a = {1, 2, 3, 4, 5}
set_b = {1, 2, 3}
            
print(set_a.issuperset(set_b))  # Вывод: True
print(set_b.issuperset(set_a))  # Вывод: False
            
        
2
Задача
Модуль 1: Python Core, 6 уровень, 3 лекция
Недоступна
Четкий но случайный
Четкий но случайный
2
Задача
Модуль 1: Python Core, 6 уровень, 3 лекция
Недоступна
Генератор квадратов
Генератор квадратов
Комментарии (10)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Slevin Уровень 64
25 июня 2025
В первой задаче пример решения - неправильный:

random_numbers = {random.randint(1, 100) for _ in range(10)}
Эта строка будет НЕ ВСЕГДА создавать сет на 10 элементов
Vanil'ka Уровень 25
29 июля 2025
Ну да. Иногда генератор создает дубликаты чисел, а set подразумевает только уникальные элементы. Отсюда размер множества меньше 10-ти. Чтобы этого избежать можно использовать функцию sample из модуля random: set(sample(range(1, 101), 10)) sample выбирает случайные уникальные значения из заданной последовательности.
Maksym Уровень 22
15 октября 2025
Вы если все же решили помочь пишите корректно у вас ошибка в коде: set(sample(range(1,101),10))👎 Правильно: set(random.sample(1,101),10))👍
Long_byte Уровень 43
12 июня 2025
когда понял что такое Симметрическая разность Элементы, которые есть в A или B, но не в обоих: А = {1, 2, 3} B = {3, 4, 5} Элементы 1, 2, 4, 5
Денис Уровень 11
3 июня 2025

random_numbers = {random.randint(1, 100) for _ in range(10)}
всегда создает множество 10 элементов?
Екатерина Уровень 22
5 июня 2025
нет, если при срабатывании рандома будут получены одинаковые числа, то финальное количество элементов множества будет меньше 10
Николай Уровень 17
15 февраля 2025
Ощущение, что требования к задаче написано нейросетью (особенно во 2й)
Денис Уровень 45
1 августа 2024
если рандомные числа будут повторяться, то множество будет состоять не из 10 чисел, а меньше, так что мне мое решение больше нравится - заполнять set, пока его длина не будет 10
Андрей Уровень 53
30 ноября 2024
Точно. Вот почему у меня с первого раза не прошла проверка, а со второго прошла)
26 июля 2025
Либо можно создать список с 10 уникальными числами : random_list = random.sample(range(100), 10) , потом преобразовать в множество и работать с множеством, как вариант