Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Множества в Python: создание, манипуляции и операции

Множества в Python

Узнайте, как тип данных set в Python упрощает дедупликацию данных и операции над множествами. Руководство охватывает создание, изменение, удаление и все основные операции над множествами.

Видео: Множества в Python

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

Множества Python поддерживают математические операции над множествами: объединение, пересечение, разность и симметрическую разность, что делает их идеальными для задач вроде дедупликации данных, проверки принадлежности и алгебры множеств.


Создание множеств в Python

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

# Пример 1: Множества с разными типами данных
# множество целых
my_set = {1, 2, 3}
print(my_set)
# множество смешанных типов
my_set = {1.0, 'Hello', (1, 2, 3)}
print(my_set)

Вывод

{1, 2, 3}
{1.0, (1, 2, 3), 'Hello'}

Обратите внимание: дубликаты автоматически удаляются, а кортежи — будучи неизменяемыми — принимаются.

# Удаление дубликатов
my_set = {1, 2, 3, 4, 3, 2}
print(my_set)
# Создание множества из списка
my_set = set([1, 2, 3, 2])
print(my_set)
# Попытка включить изменяемый элемент вызывает ошибку
# my_set = {1, 2, [3, 4]}  # TypeError: unhashable type: 'list'

Вывод

{1, 2, 3, 4}
{1, 2, 3}
Traceback (most recent call last):
  File "<string>", line 15, in <module>
my_set = {1, 2, [3, 4]}
TypeError: unhashable type: 'list'

Создание пустого множества требует конструктора set(); использование {} создаёт пустой словарь.

# Различие между множеством и словарём при создании пустых структур
a = {}
print(type(a))
a = set()
print(type(a))

Вывод

<class 'dict'>
<class 'set'>

Изменение множества в Python

Множества изменяемы, но не поддерживают индексацию или срезы из-за своей неупорядоченной природы.

Используйте add() для добавления одного элемента и update() для объединения с другим итерируемым объектом. Дубликаты автоматически игнорируются.

# Пример: Добавление элементов
my_set = {1, 3}
print(my_set)
# Попытка индексации вызывает ошибку
# my_set[0]  # TypeError: 'set' object does not support indexing
# Добавить один элемент
my_set.add(2)
print(my_set)
# Добавить несколько элементов из списка
my_set.update([2, 3, 4])
print(my_set)
# Объединить список и другое множество
my_set.update([4, 5], {1, 6, 8})
print(my_set)

Вывод

{1, 3}
{1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4, 5, 6, 8}

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

Используйте discard() для удаления элемента, если он существует, или ничего не делать иначе. В отличие от этого, remove() вызывает KeyError, если элемента нет.

# Пример: discard vs remove
my_set = {1, 3, 4, 5, 6}
print(my_set)
my_set.discard(4)
print(my_set)
my_set.remove(6)
print(my_set)
my_set.discard(2)
print(my_set)
# Следующее вызовет KeyError
# my_set.remove(2)

Вывод

{1, 3, 4, 5, 6}
{1, 3, 5, 6}
{1, 3, 5}
{1, 3, 5}
Traceback (most recent call last):
  File "<string>", line 28, in <module>
KeyError: 2

Метод pop() удаляет и возвращает произвольный элемент, а clear() очищает множество полностью.

# Пример pop и clear
my_set = set("HelloWorld")
print(my_set)
print(my_set.pop())
print(my_set)
my_set.clear()
print(my_set)

Вывод

{'H', 'l', 'r', 'W', 'o', 'd', 'e'}
H
{'r', 'W', 'o', 'd', 'e'}
set()

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

Множества Python поддерживают классическую алгебру множеств: объединение, пересечение, разность и симметрическую разность. Их можно вызывать через операторы или специальные методы.

Используем два примера множеств:

A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

Объединение

Множества в Python: создание, манипуляции и операции

Объединение A и B يجمع все уникальные элементы.

print(A | B)

Вывод

{1, 2, 3, 4, 5, 6, 7, 8}

Пересечение

Множества в Python: создание, манипуляции и операции

Пересечение возвращает только элементы, общие для обоих множеств.

print(A & B)

Вывод

{4, 5}

Разность

Множества в Python: создание, манипуляции и операции

Разность A - B перечисляет элементы, присутствующие в A, но не в B.

print(A - B)

Вывод

{1, 2, 3}

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

Множества в Python: создание, манипуляции и операции

Симметрическая разность A ^ B возвращает элементы, которые есть в одном из множеств, но не в обоих одновременно.

print(A ^ B)

Вывод

{1, 2, 3, 6, 7, 8}

Дополнительные методы множеств

Ниже — краткий справочник всех встроенных методов объектов set:

МетодОписание
add()Добавляет элемент во множество
clear()Удаляет все элементы
copy()Возвращает поверхностную копию
difference()Возвращает новое множество элементов, присутствующих в вызывающем, но не в других
difference_update()Удаление разности на месте
discard()Удаляет элемент, если он есть; без ошибки, если нет
intersection()Возвращает новое множество общих элементов
intersection_update()Обновление пересечением на месте
isdisjoint()True, если множества не имеют общих элементов
issubset()True, если вызывающее является подмножеством другого
issuperset()True, если вызывающее полностью содержит другое множество
pop()Удаляет и возвращает произвольный элемент; KeyError если пусто
remove()Удаляет элемент; KeyError если отсутствует
symmetric_difference()Возвращает новое множество элементов, эксклюзивных для каждого
symmetric_difference_update()Обновление симметрической разностью на месте
union()Возвращает новое множество со всеми уникальными элементами
update()Обновление объединением с другим итерируемым на месте

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

Проверьте наличие элемента с ключевым словом in.

my_set = set("apple")
print('a' in my_set)   # True
print('p' not in my_set)  # False

Вывод

True
False

Итерация по множеству

Перебор множества стандартным циклом for; порядок не гарантирован.

for letter in set("apple"):
    print(letter)

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

Функции вроде len(), max(), min(), sum(), all(), any(), sorted() отлично работают с множествами. Таблица распространённых утилит:

ФункцияОписание
all()True, если все элементы истинны (или множество пусто)
any()True, если хотя бы один элемент истинен
enumerate()Итерирует с индексом, полезно для отладки
len()Количество элементов
max()Наибольший элемент
min()Наименьший элемент
sorted()Возвращает отсортированный список из множества
sum()Сумма всех числовых элементов

Frozenset в Python

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

A = frozenset([1, 2, 3, 4])
B = frozenset([3, 4, 5, 6])

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

print(A.isdisjoint(B))
print(A.difference(B))
print(A | B)
# Попытка добавить элемент вызовет AttributeError
# A.add(3)  # AttributeError: 'frozenset' object has no attribute 'add'

Python

  1. Освоение типов данных в Python: практическое руководство
  2. Мастерство операторов Python: Полное руководство
  3. Оператор pass в Python: практическое руководство
  4. Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
  5. Словари в Python: создание, манипуляции и продвинутые техники
  6. Итераторы в Python: как они работают и как создать свои
  7. Замыкания в Python: как вложенные функции захватывают переменные
  8. Модуль datetime в Python: практическое руководство по датам, времени и часовым поясам
  9. Обзор Python: высокоуровневый, читаемый, интерактивный и объектно-ориентированный язык
  10. Числа в Python: Неизменяемые числовые типы данных