Изучение множеств (set) в Python: создание, свойства и применение для работы с уникальными элементами.

онлайн тренажер по питону
Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Самоучитель Python 3, собранный из материалов данного сайта.Предназначен в основном для тех, кто хочет изучить язык программирования Python с нуля.

Что такое множество в Python

Множество (set) в Python — это встроенный тип данных, представляющий собой неупорядоченную коллекцию уникальных элементов. Множества широко используются для удаления дубликатов, выполнения математических операций и оптимизации поиска элементов.

Основные характеристики множеств

Уникальность элементов: Каждый элемент может присутствовать в множестве только один раз. При попытке добавить дубликат он будет автоматически проигнорирован.

Неупорядоченность: Элементы множества не имеют определенного порядка, поэтому нельзя обращаться к ним по индексу.

Изменяемость: Множества можно модифицировать после создания — добавлять и удалять элементы.

Хешируемые элементы: В множество можно добавлять только неизменяемые типы данных (числа, строки, кортежи).

Способы создания множеств

Создание с помощью фигурных скобок

my_set = {1, 2, 3, 4, 5}
empty_set = set()  # Пустое множество
string_set = {'apple', 'banana', 'orange'}

Создание с помощью функции set()

# Из списка
my_list = [1, 2, 3, 3, 4, 4, 5]
my_set = set(my_list)
print(my_set)  # {1, 2, 3, 4, 5}

# Из строки
text_set = set('hello')
print(text_set)  # {'h', 'e', 'l', 'o'}

# Из кортежа
tuple_set = set((1, 2, 3))
print(tuple_set)  # {1, 2, 3}

Создание множества с помощью генератора

# Множество квадратов чисел от 1 до 5
squares = {x**2 for x in range(1, 6)}
print(squares)  # {1, 4, 9, 16, 25}

Основные методы работы с множествами

Добавление элементов

add() — добавляет один элемент в множество

my_set = {1, 2, 3}
my_set.add(4)
print(my_set)  # {1, 2, 3, 4}

update() — добавляет несколько элементов из итерируемого объекта

my_set = {1, 2, 3}
my_set.update([4, 5, 6])
print(my_set)  # {1, 2, 3, 4, 5, 6}

# Можно передать несколько аргументов
my_set.update([7, 8], {9, 10})
print(my_set)  # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

Удаление элементов

remove() — удаляет элемент, вызывает KeyError если элемент не найден

my_set = {1, 2, 3, 4}
my_set.remove(3)
print(my_set)  # {1, 2, 4}

# my_set.remove(5)  # KeyError: 5

discard() — удаляет элемент, не вызывает ошибку если элемент отсутствует

my_set = {1, 2, 3, 4}
my_set.discard(3)
my_set.discard(5)  # Ошибки не будет
print(my_set)  # {1, 2, 4}

pop() — удаляет и возвращает произвольный элемент

my_set = {1, 2, 3, 4}
removed_element = my_set.pop()
print(f"Удален элемент: {removed_element}")
print(my_set)  # Остальные элементы

clear() — очищает множество полностью

my_set = {1, 2, 3, 4}
my_set.clear()
print(my_set)  # set()

Копирование множеств

copy() — создает поверхностную копию множества

original_set = {1, 2, 3}
copied_set = original_set.copy()
copied_set.add(4)
print(original_set)  # {1, 2, 3}
print(copied_set)    # {1, 2, 3, 4}

Операции над множествами

Объединение (union)

set1 = {1, 2, 3}
set2 = {3, 4, 5}

# Используя оператор |
union_set = set1 | set2
print(union_set)  # {1, 2, 3, 4, 5}

# Используя метод union()
union_set = set1.union(set2)
print(union_set)  # {1, 2, 3, 4, 5}

Пересечение (intersection)

set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}

# Используя оператор &
intersection_set = set1 & set2
print(intersection_set)  # {3, 4}

# Используя метод intersection()
intersection_set = set1.intersection(set2)
print(intersection_set)  # {3, 4}

Разность (difference)

set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}

# Используя оператор -
difference_set = set1 - set2
print(difference_set)  # {1, 2}

# Используя метод difference()
difference_set = set1.difference(set2)
print(difference_set)  # {1, 2}

Симметрическая разность (symmetric_difference)

set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}

# Используя оператор ^
symmetric_diff = set1 ^ set2
print(symmetric_diff)  # {1, 2, 5, 6}

# Используя метод symmetric_difference()
symmetric_diff = set1.symmetric_difference(set2)
print(symmetric_diff)  # {1, 2, 5, 6}

Проверка принадлежности и отношений

Проверка вхождения элемента

my_set = {1, 2, 3, 4, 5}
print(3 in my_set)      # True
print(6 in my_set)      # False
print(7 not in my_set)  # True

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

set1 = {1, 2, 3}
set2 = {1, 2, 3, 4, 5}

print(set1.issubset(set2))    # True - set1 является подмножеством set2
print(set2.issuperset(set1))  # True - set2 является надмножеством set1
print(set1.isdisjoint(set2))  # False - множества пересекаются

Встроенные функции для работы с множествами

my_set = {1, 2, 3, 4, 5}

print(len(my_set))    # 5 - количество элементов
print(max(my_set))    # 5 - максимальный элемент
print(min(my_set))    # 1 - минимальный элемент
print(sum(my_set))    # 15 - сумма всех элементов
print(sorted(my_set)) # [1, 2, 3, 4, 5] - отсортированный список

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

Python также предоставляет неизменяемую версию множества — frozenset. Такие множества нельзя изменить после создания, но их можно использовать как ключи словаря или элементы других множеств.

# Создание frozenset
immutable_set = frozenset([1, 2, 3, 4])
print(immutable_set)  # frozenset({1, 2, 3, 4})

# Использование в качестве ключа словаря
my_dict = {frozenset([1, 2]): 'value1', frozenset([3, 4]): 'value2'}
print(my_dict)

# Множество из frozenset
set_of_frozensets = {frozenset([1, 2]), frozenset([3, 4])}
print(set_of_frozensets)

Практические примеры использования

Удаление дубликатов из списка

numbers = [1, 2, 2, 3, 4, 4, 5]
unique_numbers = list(set(numbers))
print(unique_numbers)  # [1, 2, 3, 4, 5]

Поиск общих элементов в списках

list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
common_elements = list(set(list1) & set(list2))
print(common_elements)  # [4, 5]

Фильтрация уникальных слов в тексте

text = "python programming python language programming"
words = text.split()
unique_words = set(words)
print(unique_words)  # {'python', 'programming', 'language'}

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

категории

  • Введение в Python
  • Основы программирования на Python
  • Управляющие конструкции
  • Структуры данных
  • Функции и модули
  • Обработка исключений
  • Работа с файлами и потоками
  • файловая система
  • Объектно-ориентированное программирование (ООП)
  • Регулярные выражения
  • Дополнительные темы
  • Общая база питона