English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основные курсы Python

Управление потоком Python

Функции в Python

Типы данных Python

Операции с файлами Python

Объекты и классы Python

Даты и время Python

Продвинутые знания Python

Руководство по Python

Множественные значения (Set) в Python

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

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

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

Но само множество является изменяемым. Мы можем добавлять или удалять элементы из него.

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

Как создать множество?

Создается множество, поместив все элементы в фигурные скобки {} и разделяя их запятыми или используя встроенную функцию set().

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

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

Попробуйте также следующий пример.

# Множество без повторений
# Output: {1, 2, 3, 4}
my_set = {1,2,3,4,3,2}
print(my_set)
#множество не может содержать изменяемые элементы
#здесь [3, 4] является изменяемым списком
#Если uncomment 12 строку,
# Это приведет к ошибке.
# TypeError: unhashable type: 'list'
#my_set = {1, 2, [3, 4]}
# Мы можем создать множество из списка
# Output: {1, 2, 3}
my_set = set([1,2,3,2])
print(my_set)

Создание пустого множества несколько особенное.

Прямые скобки {} создают пустой словарь в Python. Чтобы создать множество без элементов, мы используем функцию set() без параметров.

# Инициализация с использованием {}
a = {}
# Проверка типа данных a
# Вывод: <class 'dict'>
print(type(a))
# Инициализация с использованием set()
a = set()
# Проверка типа данных a
# Вывод: <class 'set'>
print(type(a))

Как изменить множество в Python?

Сборник является изменяемым. Но поскольку они не упорядочены, индекс не имеет значения.

Мы не можем использовать индекс или разрез для доступа или изменения элементов набора. Набор это не поддерживает.

мы можем использовать метод add() для добавления одного элемента, использовать метод update() для добавления нескольких элементов. Метод update() может приниматьтупль,лист,строкаили другой набор в качестве его параметра. В всех случаях, избегайте повторения.

# Инициализация my_set
my_set = {1,3}
print(my_set)
# если uncomment 9 строку,
# вы получите ошибку
# TypeError: 'set' object does not support indexing
# my_set[0]
# Increase one element
# Output: {1, 2, 3}
my_set.add(2)
print(my_set)
# Increase multiple elements
# Output: {1, 2, 3, 4}
my_set.update([2,3,4])
print(my_set)
# Increase list and set
# Output: {1, 2, 3, 4, 5, 6, 8}
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() можно использовать для удаления специфического элемента из набора.

Единственное различие между ними заключается в том, что, если использовать discard(), а элемент не существует в наборе, он остается неизменным. Но remove() в этом случае вызывает ошибку.

Этот пример продемонстрирует это.

# Инициализация my_set
my_set = {1, 3, 4, 5, 6}
print(my_set)
# отбросить один элемент
# Output: {1, 3, 5, 6}
my_set.discard(4)
print(my_set)
# удалить уже существующий элемент
# Output: {1, 3, 5}
my_set.remove(6)
print(my_set)
# отбросить один элемент
# не出现在 my_set
# Output: {1, 3, 5}
my_set.discard(2)
print(my_set)
# удалить один элемент
# не出现在 my_set
# Если uncomment #my_set.remove(2),
# возникнет ошибка.
# Output: KeyError: 2
# my_set.remove(2)

Таким же образом, мы можем использовать метод pop() для удаления и возврата одного элемента.

Набор是无序的,неопределенно, какой элемент будет удален. Это совершенно случайно.

Мы также можем использовать метод clear() для удаления всех элементов из набора.

# Инициализация my_set
# Output: уникальный набор элементов
my_set = set("HelloWorld")
print(my_set)
# pop один элемент
# Вывод: случайный элемент
print(my_set.pop())
# Удаление любого элемента
# Вывод: случайный элемент
my_set.pop()
print(my_set)
# Очистка my_set
# Вывод: set()
my_set.clear()
print(my_set)

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

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

Давайте рассмотрим следующие два множества для выполнения следующих операций.

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

Объединение множеств

Объединение A и B - это множество всех элементов из обоих множеств.

Объединение выполняется с помощью оператора |. Также можно использовать функцию union().

# Инициализация A и B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# Использование оператора |
# Вывод: {1, 2, 3, 4, 5, 6, 7, 8}
print(A | B)

Попробуйте следующий пример в Python shell.

# Использование функции объединения
>>> A.union(B)
{1, 2, 3, 4, 5, 6, 7, 8}
# Использование функции объединения на B
>>> B.union(A)
{1, 2, 3, 4, 5, 6, 7, 8}

множеств пересекаются

AиBПересечение - это множество элементов, общих для обоих множеств.

Пересечение выполняется с помощью оператора *. Операция intersection() выполняет ту же функцию.

# Инициализация A и B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# Использование оператора &
# Вывод: {4, 5}
print(A & B)

Попробуйте следующий пример в Python shell.

# Использование функции пересечения на A
>>> A.intersection(B)
{4, 5}
# Использование функции пересечения на B
>>> B.intersection(A)
{4, 5}

Разложение множеств

Разложение A и B (A-B) - это множество элементов, присутствующих только в A, но не в B. Аналогично, B-A - множество элементов, присутствующих только в B, но не в A.

Разложение выполняется с помощью оператора -. Операция difference() выполняет ту же функцию.

# Инициализация A и B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# Использование оператора - на A
# Вывод: {1, 2, 3}
print(A - B)

Попробуйте следующий пример в Python shell.

# Использование функции разложения на A
>>> A.difference(B)
{1, 2, 3}
# Использование оператора - на B
>>> B - A
{8, 6, 7}
# Использование функции разложения на B
>>> B.difference(A)
{8, 6, 7}

Симметричное разложение множеств

Симметричное разложение A и B - это множество элементов, присутствующих в A и B, но не в обоих.

Симметричное разложение выполняется с помощью оператора ^. Операция symmetric_difference() выполняет ту же функцию.

# Инициализация A и B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# Использование оператора ^
# Вывод: {1, 2, 3, 6, 7, 8}
print(A ^ B)

Попробуйте следующий пример в Python shell.

# Использование функции symmetric_difference на A
>>> A.symmetric_difference(B)
{1, 2, 3, 6, 7, 8}
# Использование функции symmetric_difference на B
>>> B.symmetric_difference(A)
{1, 2, 3, 6, 7, 8}

Разные методы Python Set

Множество методов для множеств exists, некоторые из которых уже использовались. Это список всех доступных методов объекта set.

Методы Python 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
my_set = set("apple")
# Проверка наличия 'a'
# Вывод: True
print('a' in my_set)
# Проверка наличия 'p'
# Вывод: False
print('p' not in my_set)

Пробег по набору

Используя цикл for, мы можем пройтись по каждому элементу в наборе.

>>> for letter in set("apple"):
...    print(letter)
...    
a
p
e
l

Набор с内置 функциями

Внутренние функции, такие как all(), any(), enumerate(), len(), max(), min(), sort(), sum() и т.д., часто используются с set для выполнения различных задач.

С内置功能
ФункцияОписание
all()

Если все элементы набора true (или набор пуст), то возвращает True.

any()

Если любое элемент в наборе true, то возвращает True. Если набор пуст, то возвращает False.

enumerate()Возвращает объект итератора. Он содержит пары всех элементов с индексом и значением.
len()Возвращает длину набора (число элементов).
max()Возвращает наибольший элемент в наборе.
min()Возвращает наименьший элемент в наборе.
sorted()Возвращает новый отсортированный список элементов из набора (не сортирует сам набор).
sum()Возвращает сумму всех элементов в наборе.

Python Frozenset

Frozenset - это новый класс с функциями набора, но после его назначения элементы не могут быть изменены. Тупляк - это неизменяемый список, а冻结ный набор - это неизменяемый набор.

Мutable sets are not hashable and cannot be used as dictionary keys. On the other hand, frozenset is hashable and can be used as a dictionary key.

Функция может быть использованаFrozenset()СозданиеFrozensets.

Этот тип данных поддерживает методы, такие как copy(), difference(), intersection(), isdisjoint(), issubset(), issuperset(), symmetric_difference() и union(). Поскольку данные не изменяются, нет методов для добавления или удаления элементов.

# Инициализация A и B
A = frozenset([1, 2, 3, 4])
B = frozenset([3, 4, 5, 6])

Пробуйте эти примеры в Python shell.

>>> A.isdisjoint(B)
False
>>> A.difference(B)
frozenset({1, 2})
>>> A | B
frozenset({1, 2, 3, 4, 5, 6})
>>> A.add(3)
...
Ошибка атрибута: объект 'frozenset' не имеет атрибута 'add'