Множества (Set) в Python
Множество (set) — это коллекция уникальных данных, то есть элементы внутри множества не могут повторяться.
Например, если нужно хранить информацию об ID студентов, множество подходит, поскольку ID не дублируются.
Создание множества в Python
В Python мы создаём множества, помещая все элементы в фигурные скобки {}, разделённые запятыми.
Множество может содержать любое количество элементов разных типов (целые, вещественные, кортежи, строки и т.д.). Но множество не может содержать изменяемые элементы — списки, множества или словари.
Пример:
# создаём множество целых чисел
student_id = {112, 114, 116, 118, 115}
print('Student ID:', student_id)
# создаём множество строк
vowel_letters = {'a', 'e', 'i', 'o', 'u'}
print('Vowel Letters:', vowel_letters)
# создаём множество смешанных типов
mixed_set = {'Hello', 101, -2, 'Bye'}
print('Set of mixed data types:', mixed_set)
Вывод
Student ID: {112, 114, 115, 116, 118}
Vowel Letters: {'u', 'a', 'e', 'i', 'o'}
Set of mixed data types: {'Hello', 'Bye', 101, -2}
В примере выше мы создали разные типы множеств, помещая элементы в фигурные скобки {}.
Примечание
При запуске этого кода порядок вывода может отличаться. Это потому, что множество не имеет определённого порядка.
Создание пустого множества
Создать пустое множество немного сложно. Пустые фигурные скобки {} создадут пустой словарь.
Чтобы создать множество без элементов, мы используем функцию set() без аргументов. Например:
# создаём пустое множество
empty_set = set()
# создаём пустой словарь
empty_dictionary = { }
# проверяем тип empty_set
print('Data type of empty_set:', type(empty_set))
# проверяем тип empty_dictionary
print('Data type of empty_dictionary:', type(empty_dictionary))
Вывод
Data type of empty_set: <class 'set'>
Data type of empty_dictionary: <class 'dict'>
Здесь:
empty_set— пустое множество, созданное черезset()empty_dictionary— пустой словарь, созданный через{}
Мы использовали функцию type(), чтобы узнать, к какому классу относятся empty_set и empty_dictionary.
Дубликаты в множестве
Посмотрим, что произойдёт при попытке включить дубликаты:
numbers = {2, 4, 6, 6, 2, 8}
print(numbers) # {8, 2, 4, 6}
Мы видим, что в множестве нет дубликатов, поскольку множество не может их содержать.
Добавление и обновление элементов
Множества изменяемы. Однако, поскольку они неупорядоченные, индексация не имеет смысла.
Мы не можем получить доступ к элементу множества или изменить его через индексацию или срез. Тип set не поддерживает это.
Добавление элемента
В Python мы используем метод add() для добавления элемента. Например:
numbers = {21, 34, 54, 12}
print('Initial Set:',numbers)
# используем метод add()
numbers.add(32)
print('Updated Set:', numbers)
Вывод
Initial Set: {34, 12, 21, 54}
Updated Set: {32, 34, 12, 21, 54}
Обновление множества
Метод update() используется для обновления множества элементами других коллекций (списков, кортежей, множеств).
companies = {'Lacoste', 'Ralph Lauren'}
tech_companies = ['apple', 'google', 'apple']
# используем метод update()
companies.update(tech_companies)
print(companies)
# Вывод: {'google', 'apple', 'Lacoste', 'Ralph Lauren'}
Все уникальные элементы tech_companies добавлены в companies.
Удаление элемента из множества
Используем метод discard() для удаления указанного элемента:
languages = {'Swift', 'Java', 'Python'}
print('Initial Set:',languages)
# удаляем 'Java' из множества
removedValue = languages.discard('Java')
print('Set after remove():', languages)
Вывод
Initial Set: {'Python', 'Swift', 'Java'}
Set after remove(): {'Python', 'Swift'}
Встроенные функции для множеств
Популярные встроенные функции:
Функция |
Описание |
|---|---|
|
Возвращает True, если все элементы истинны (или множество пусто). |
|
Возвращает True, если любой элемент истинен. Если множество пусто — False. |
|
Возвращает объект enumerate, содержащий индексы и значения. |
|
Возвращает количество элементов. |
|
Возвращает наибольший элемент. |
|
Возвращает наименьший элемент. |
|
Возвращает новый отсортированный список (не сортирует само множество). |
|
Возвращает сумму всех элементов. |
Итерация по множеству
fruits = {"Apple", "Peach", "Mango"}
# цикл for для доступа к каждому фрукту
for fruit in fruits:
print(fruit)
Вывод
Mango
Peach
Apple
Количество элементов
Используем метод len() для определения количества элементов:
even_numbers = {2,4,6,8}
print('Set:',even_numbers)
# находим количество элементов
print('Total Elements:', len(even_numbers))
Вывод
Set: {8, 2, 4, 6}
Total Elements: 4
Операции над множествами
Python предоставляет методы для математических операций: объединение, пересечение, разность, симметрическая разность.
Объединение двух множеств
Объединение множеств A и B включает все элементы обоих множеств.
Используем оператор | или метод union():
# первое множество
A = {1, 3, 5}
# второе множество
B = {0, 2, 4}
# объединение через |
print('Union using |:', A | B)
# объединение через union()
print('Union using union():', A.union(B))
Вывод
Union using |: {0, 1, 2, 3, 4, 5}
Union using union(): {0, 1, 2, 3, 4, 5}
Примечание
A|B и union() эквивалентны операции A ⋃ B.
Пересечение множеств
Пересечение множеств A и B включает общие элементы.
Используем оператор & или метод intersection():
# первое множество
A = {1, 3, 5}
# второе множество
B = {1, 2, 3}
# пересечение через &
print('Intersection using &:', A & B)
# пересечение через intersection()
print('Intersection using intersection():', A.intersection(B))
Вывод
Intersection using &: {1, 3}
Intersection using intersection(): {1, 3}
Примечание
A&B и intersection() эквивалентны операции A ⋂ B.
Разность множеств
Разность множеств A и B содержит элементы A, отсутствующие в B.
Используем оператор - или метод difference():
# первое множество
A = {2, 3, 5}
# второе множество
B = {1, 2, 6}
# разность через -
print('Difference using &:', A - B)
# разность через difference()
print('Difference using difference():', A.difference(B))
Вывод
Difference using &: {3, 5}
Difference using difference(): {3, 5}
Симметрическая разность
Симметрическая разность множеств A и B включает все элементы A и B, исключая общие.
Используем оператор ^ или метод symmetric_difference():
# первое множество
A = {2, 3, 5}
# второе множество
B = {1, 2, 6}
# симметрическая разность через ^
print('using ^:', A ^ B)
# через symmetric_difference()
print('using symmetric_difference():', A.symmetric_difference(B))
Вывод
using ^: {1, 3, 5, 6}
using symmetric_difference(): {1, 3, 5, 6}
Проверка равенства множеств
Используем оператор ==:
# первое множество
A = {1, 3, 5}
# второе множество
B = {3, 5, 1}
if A == B:
print('Set A and Set B are equal')
else:
print('Set A and Set B are not equal')
Вывод
Set A and Set B are equal
В примере A и B имеют одинаковые элементы, поэтому условие истинно.
Другие методы множеств
Метод |
Описание |
|---|---|
|
Добавляет элемент в множество. |
|
Удаляет все элементы. |
|
Возвращает копию множества. |
|
Возвращает разность как новое множество. |
|
Удаляет элементы другого множества из текущего. |
|
Удаляет элемент, если он есть (не выбрасывает исключение). |
|
Возвращает пересечение как новое множество. |
|
Обновляет множество пересечением. |
|
True, если множества не пересекаются. |
|
True, если другое множество содержит текущее. |
|
True, если текущее содержит другое. |
|
Удаляет и возвращает произвольный элемент. KeyError, если пусто. |
|
Удаляет элемент. KeyError, если элемента нет. |
|
Возвращает симметрическую разность. |
|
Обновляет множество симметрической разностью. |
|
Возвращает объединение. |
|
Обновляет множество объединением. |