Тема: Типы данных • Урок 7 из 7
Множества (sets) — это неупорядоченные коллекции уникальных элементов. Они используются для хранения уникальных значений, проверки принадлежности и выполнения математических операций над множествами, таких как объединение, пересечение и разность.
Множества в Python создаются с помощью фигурных скобок {} или функции set():
# Пустое множество (обратите внимание, что {} создает пустой словарь, а не множество)
empty_set = set()
# Множество с элементами
numbers = {1, 2, 3, 4, 5}
# Создание множества из других последовательностей
set_from_list = set([1, 2, 3, 2, 1]) # {1, 2, 3}
set_from_string = set("hello") # {'h', 'e', 'l', 'o'}Множества поддерживают различные операции для добавления, удаления и проверки элементов:
# Создаем множество
numbers = {1, 2, 3, 4, 5}
print(numbers)
# Добавление элемента
numbers.add(6)
print(numbers)
# Добавление нескольких элементов
numbers.update([4, 5, 6]) # Дубликаты игнорируются
print(numbers)
# Удаление элемента
numbers.remove(6) # Вызывает ошибку, если элемента нет
print(numbers)
# Математические операции над множествами
A = {1, 2, 3, 4, 5}
B = {3, 4, 5, 6, 7, 8}
# Объединение (элементы, которые есть в A или B)
print(f"Объединение: {A | B}")
# Пересечение (элементы, которые есть и в A, и в B)
print(f"Пересечение: {A & B}")
# Разность (элементы, которые есть в A, но нет в B)
print(f"Разность A - B: {A - B}")
# Разность (элементы, которые есть в B, но нет в A)
print(f"Разность B - A: {B - A}")
# Симметрическая разность (элементы, которые есть в A или B, но не в обоих)
print(f"Симметрическая разность: {A ^ B}")Python предоставляет множество методов для работы с множествами:
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7}
# Добавление элементов
A.add(6) # Добавляет один элемент
A.update([7, 8, 9]) # Добавляет несколько элементов
# Удаление элементов
A.remove(9) # Удаляет элемент (вызывает ошибку, если элемента нет)
A.discard(10) # Удаляет элемент (не вызывает ошибку, если элемента нет)
popped = A.pop() # Удаляет и возвращает произвольный элемент
A.clear() # Удаляет все элементы
# Операции над множествами
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7}
union = A.union(B) # Объединение
intersection = A.intersection(B) # Пересечение
difference = A.difference(B) # Разность A - B
sym_diff = A.symmetric_difference(B) # Симметрическая разность
# Проверка отношений между множествами
A = {1, 2, 3}
B = {1, 2, 3, 4, 5}
C = {1, 2}
print(A.issubset(B)) # True (A является подмножеством B)
print(B.issuperset(A)) # True (B является надмножеством A)
print(A.isdisjoint(C)) # False (A и C имеют общие элементы)Множества можно изменять на месте с помощью методов, которые модифицируют исходное множество:
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7}
# Обновление множества (объединение)
A |= B # Эквивалентно A.update(B)
print(A) # {1, 2, 3, 4, 5, 6, 7}
# Пересечение на месте
A = {1, 2, 3, 4, 5}
A &= B # Эквивалентно A.intersection_update(B)
print(A) # {4, 5}
# Разность на месте
A = {1, 2, 3, 4, 5}
A -= B # Эквивалентно A.difference_update(B)
print(A) # {1, 2, 3}
# Симметрическая разность на месте
A = {1, 2, 3, 4, 5}
A ^= B # Эквивалентно A.symmetric_difference_update(B)
print(A) # {1, 2, 3, 6, 7}Python также предоставляет неизменяемую версию множества — frozenset. Она имеет те же методы, что и обычное множество, за исключением методов, которые изменяют множество:
# Создание frozenset
frozen = frozenset([1, 2, 3, 4, 5])
# Следующие операции вызовут ошибку:
# frozen.add(6)
# frozen.remove(5)
# frozen.clear()
# Но можно использовать операции, которые не изменяют множество:
print(frozen.union({6, 7})) # frozenset({1, 2, 3, 4, 5, 6, 7})
print(3 in frozen) # TrueАналогично списочным и словарным включениям, Python поддерживает множественные включения:
# Создание множества квадратов чисел
squares = {x**2 for x in range(1, 6)}
print(squares) # {1, 4, 9, 16, 25}
# С условием
even_squares = {x**2 for x in range(1, 11) if x % 2 == 0}
print(even_squares) # {4, 16, 36, 64, 100}Множества часто используются для удаления дубликатов, проверки принадлежности и выполнения математических операций:
# Удаление дубликатов из списка
numbers = [1, 2, 3, 2, 1, 4, 5, 4, 3]
unique_numbers = list(set(numbers))
print(unique_numbers) # [1, 2, 3, 4, 5]
# Проверка наличия общих элементов
list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]
common = set(list1) & set(list2)
print(common) # {3, 4}
# Нахождение уникальных элементов в каждом списке
unique_to_list1 = set(list1) - set(list2)
unique_to_list2 = set(list2) - set(list1)
print(unique_to_list1) # {1, 2}
print(unique_to_list2) # {5, 6}