Вернуться на главную

Множества

Тема: Типы данных • Урок 7 из 7

Множества в Python

Множества (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}

Неизменяемые множества (frozenset)

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

Множественные включения (Set Comprehensions)

Аналогично списочным и словарным включениям, 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}
← Предыдущий урокСледующий урок →