Множества в Python ✅ Подробный справочник Set
Множества в Python – это структура данных, которые содержат неупорядоченные элементы. Элементы также не является индексированным. Как и список, множество позволяет внесение и удаление элементов. Однако, есть ряд особенных характеристик, которые определяют и отделяют множество от других структур данных:
- Множество не содержит дубликаты элементов;
- Элементы множества являются неизменными (их нельзя менять), однако само по себе множество является изменяемым, и его можно менять;
- Так как элементы не индексируются, множества не поддерживают никаких операций среза и индексирования.
В этой статье мы обсудим различные операции, которые можно применять на множествах в Python.
Содержание:
- Создание множеств
- Доступ к элементам множеств
- Добавление элементов во множество
- Удаление элементов из множеств
- Объединение множеств
- Пересечение множеств
- Разница множеств
- Сравнение множеств
- Методы множеств
- Frozenset в Python
- Вывод
Создание множеств
Существует два пути, следуя которым, мы можем создавать множества в Python.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Python Форум Помощи
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Подписаться
Мы можем создать множество путем передачи всех элементов множества внутри фигурных скобок {}
и разделить элементы при помощи запятых (,)
. Множество может содержать любое количество элементов и элементы могут быть разных типов, к примеру, целые числа, строки, кортежи, и т. д. Однако, множество не поддерживает изменяемые элементы, такие как списки, словари, и так далее.
Рассмотрим пример создания множества в Python:
Python
num_set = {1, 2, 3, 4, 5, 6} print(num_set)
num_set = {1, 2, 3, 4, 5, 6} print(num_set) |
Результат:
Python
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 6} |
Только что мы создали множество чисел. Мы также можем создать множество из строк. Например:
string_set = {«Nicholas», «Michelle», «John», «Mercy»} print(string_set)
string_set = {«Nicholas», «Michelle», «John», «Mercy»} print(string_set) |
Результат:
Python
{‘Michelle’, ‘Nicholas’, ‘John’, ‘Mercy’}
{‘Michelle’, ‘Nicholas’, ‘John’, ‘Mercy’} |
Возможно вы обратили внимание на то, что элементы в выдаче выше находятся в другом порядке, отличном от того, как мы добавляли их в множество. Это связано с тем, что элементы множества находятся в произвольном порядке. Если вы запустите тот же код еще раз, возможно вы получите выдачу с элементами, которые каждый раз будут находиться в другом порядке.
Мы также можем создать множество с элементами разных типов. Например:
Python
mixed_set = {2.0, «Nicholas», (1, 2, 3)} print(mixed_set)
mixed_set = {2.0, «Nicholas», (1, 2, 3)} print(mixed_set) |
Результат:
Python
{2.0, ‘Nicholas’, (1, 2, 3)}
{2.0, ‘Nicholas’, (1, 2, 3)} |
Все элементы в упомянутом выше множестве принадлежат разным типам.
Мы также можем создать множество из списков. Это можно сделать, вызвав встроенную функцию Python под названием set()
. Например:
Python
num_set = set([1, 2, 3, 4, 5, 6]) print(num_set)
num_set = set([1, 2, 3, 4, 5, 6]) print(num_set) |
Результат:
Python
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 6} |
Как упоминалось ранее, множества не содержат дубликаты элементов.
Python
num_set = set([1, 2, 3, 1, 2]) print(num_set)
num_set = set([1, 2, 3, 1, 2]) print(num_set) |
Результат:
Python
{1, 2, 3}
{1, 2, 3} |
Множество удалило дубликаты и выдало только по одному экземпляру элементов. Это также происходит при создании множества с нуля. Например:
num_set = {1, 2, 3, 1, 2} print(num_set)
num_set = {1, 2, 3, 1, 2} print(num_set) |
Результат:
Python
{1, 2, 3}
{1, 2, 3} |
И снова, множество удалило дубликаты и вернуло только один из дублируемых объектов.
Создание пустого множества подразумевает определенную хитрость. Если вы используете пустые фигурные скобки {}
в Python, вы скорее создадите пустой словарь, а не множество. Например:
Python
x = {} print(type(x))
x = {} print(type(x)) |
Результат:
Python
<class ‘dict’>
<class ‘dict’> |
Как показано в выдаче, тип переменной х
является словарем.
Чтобы создать пустое множество в Python, мы должны использовать функцию set()
без передачи какого-либо значения в параметрах, как показано ниже:
Python
x = set() print(type(x))
x = set() print(type(x)) |
Результат:
Python
<class ‘set’>
<class ‘set’> |
Выдача показывает, что мы создали множество.
Доступ к элементам множеств
Python не предоставляет прямой способ получения значения к отдельным элементам множества. Однако, мы можем использовать цикл для итерации через все элементы множества. Например:
Python
months = set([«Jan», «Feb», «March», «Apr», «May», «June», «July», «Aug», «Sep», «Oct», «Nov», «Dec»]) for m in months: print(m)
months = set([«Jan», «Feb», «March», «Apr», «May», «June», «July», «Aug», «Sep», «Oct», «Nov», «Dec»])
for m in months: print(m) |
Результат:
Python
March Feb Dec Jan May Nov Oct Apr June Aug Sep July
1 2 3 4 5 6 7 8 9 10 11 12 | March Feb Dec Jan May Nov Oct Apr June Aug Sep July |
Мы также можем проверить наличие элемента во множестве при помощи in
, как показано ниже:
Python
months = set([«Jan», «Feb», «March», «Apr», «May», «June», «July», «Aug», «Sep», «Oct», «Nov», «Dec»]) print(«May» in months)
months = set([«Jan», «Feb», «March», «Apr», «May», «June», «July», «Aug», «Sep», «Oct», «Nov», «Dec»])
print(«May» in months) |
Результат:
Python
True
Код возвращает «True«, а это означает, что элемент был найден во множестве.
Python
months = set([«Jan», «Feb», «March», «Apr», «May», «June», «July», «Aug», «Sep», «Oct», «Nov», «Dec»]) print(«Nicholas» in months) # False
months = set([«Jan», «Feb», «March», «Apr», «May», «June», «July», «Aug», «Sep», «Oct», «Nov», «Dec»])
print(«Nicholas» in months) # False |
Как и ожидалось, код вернул «
Добавление элементов во множество
Python позволяет нам вносить новые элементы во множество при помощи функции add()
. Например:
Python
months = set([«Jan», «March», «Apr», «May», «June», «July», «Aug», «Sep», «Oct», «Nov», «Dec»]) months.add(«Feb») print(months)
months = set([«Jan», «March», «Apr», «May», «June», «July», «Aug», «Sep», «Oct», «Nov», «Dec»])
months. add(«Feb») print(months) |
Результат:
{‘Oct’, ‘Dec’, ‘Feb’, ‘July’, ‘May’, ‘Jan’, ‘June’, ‘March’, ‘Sep’, ‘Aug’, ‘Nov’, ‘Apr’}
{‘Oct’, ‘Dec’, ‘Feb’, ‘July’, ‘May’, ‘Jan’, ‘June’, ‘March’, ‘Sep’, ‘Aug’, ‘Nov’, ‘Apr’} |
Элемент «Feb» успешно внесен во множество. Если это было множество чисел, мы не можем передать новый элемент внутри скобочек, как мы делаем это для строк. Например:
Python
num_set = {1, 2, 3} num_set.add(4) print(num_set)
num_set = {1, 2, 3} num_set.add(4) print(num_set) |
Результат:
Python
{1, 2, 3, 4}
{1, 2, 3, 4} |
В следующем разделе мы обсудим, как удалять элементы из множеств.
Удаление элемента из множеств
Python позволяет нам удалять элемент из множества, но не используя индекс, так как множество элементов не индексированы. Элементы могут быть удалены при помощи обоих методов discard()
и remove()
.
Помните, что метод discard()
не будет выдавать ошибку, если элемент не был найден во множестве. Однако, если метод remove()
используется и элемент не был найден, возникнет ошибка.
Давайте продемонстрируем как удалять элемент при помощи метода discard()
:
Python
num_set = {1, 2, 3, 4, 5, 6} num_set.discard(3) print(num_set)
num_set = {1, 2, 3, 4, 5, 6} num_set.discard(3) print(num_set) |
Результат:
Python
{1, 2, 4, 5, 6}
{1, 2, 4, 5, 6} |
Элемент 3
был удален из множества.
Аналогично, метод remove()
может использоваться следующим образом:
Python
num_set = {1, 2, 3, 4, 5, 6} num_set.remove(3) print(num_set)
num_set = {1, 2, 3, 4, 5, 6} num_set.remove(3) print(num_set) |
Результат:
Python
{1, 2, 4, 5, 6}
{1, 2, 4, 5, 6} |
Теперь попробуем удалить элемент, которого нет во множестве. Сначала используем метод discard()
:
Python
num_set = {1, 2, 3, 4, 5, 6} num_set.discard(7) print(num_set)
num_set = {1, 2, 3, 4, 5, 6} num_set.discard(7) print(num_set) |
Результат:
Python
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 6} |
Выдача выше показывает, что никакого воздействия на множество не было оказано. Теперь посмотрим, что выйдет из использования метода remove()
по аналогичному сценарию:
Python
num_set = {1, 2, 3, 4, 5, 6} num_set.remove(7) print(num_set)
num_set = {1, 2, 3, 4, 5, 6} num_set.remove(7) print(num_set) |
Результат:
Python
Traceback (most recent call last): File «C:\Users\admin\sets.py», line 2, in <module> num_set.remove(7) KeyError: 7
Traceback (most recent call last): File «C:\Users\admin\sets.py», line 2, in <module> num_set.remove(7) KeyError: 7 |
Выдача показывает, что метод выдал ошибку KeyError, так как мы пытались удалить элемент, которого нет во множестве.
С методом pop()
, мы можем удалить и вернуть элемент. Так как элементы находятся в произвольном порядке, мы не можем утверждать или предсказать, какой элемент будет удален.
Например:
Python
num_set = {1, 2, 3, 4, 5, 6} print(num_set.pop())
num_set = {1, 2, 3, 4, 5, 6} print(num_set.pop()) |
Результат:
Python
1
Вы можете использовать тот же метод при удалении элемента и возврате элементов, которые остаются во множестве. Например:
Python
num_set = {1, 2, 3, 4, 5, 6} num_set.pop() print(num_set)
num_set = {1, 2, 3, 4, 5, 6} num_set.pop() print(num_set) |
Результат:
Python
{2, 3, 4, 5, 6}
{2, 3, 4, 5, 6} |
Эти элементы остаются во множестве.
Метод Python под названием clear()
поможет удалить все элементы во множестве. Например:
Python
num_set = {1, 2, 3, 4, 5, 6} num_set.clear() print(num_set)
num_set = {1, 2, 3, 4, 5, 6} num_set.clear() print(num_set) |
Результатом является пустой set()
без каких-либо элементов внутри.
Объединение множеств
Предположим, у нас есть два множества, А и В. Объединение этих двух множеств — это множество со всеми элементами обеих множеств. Такая операция выполняется при помощи функции Python под названием union()
.
Рассмотрим пример:
Python
months_a = set([«Jan», «Feb», «March», «Apr», «May», «June»]) months_b = set([«July», «Aug», «Sep», «Oct», «Nov», «Dec»]) all_months = months_a.union(months_b) print(all_months)
months_a = set([«Jan», «Feb», «March», «Apr», «May», «June»]) months_b = set([«July», «Aug», «Sep», «Oct», «Nov», «Dec»])
all_months = months_a. union(months_b) print(all_months) |
Результат:
Python
{‘Oct’, ‘Jan’, ‘Nov’, ‘May’, ‘Aug’, ‘Feb’, ‘Sep’, ‘March’, ‘Apr’, ‘Dec’, ‘June’, ‘July’}
{‘Oct’, ‘Jan’, ‘Nov’, ‘May’, ‘Aug’, ‘Feb’, ‘Sep’, ‘March’, ‘Apr’, ‘Dec’, ‘June’, ‘July’} |
Объединение может состоять из более чем двух множеств, и все их элементы сложатся в одно большое множество. Например:
Python
x = {1, 2, 3} y = {4, 5, 6} z = {7, 8, 9} output = x.union(y, z) print(output)
1 2 3 4 5 6 7 | x = {1, 2, 3} y = {4, 5, 6} z = {7, 8, 9}
output = x.union(y, z)
print(output) |
Результат:
Python
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2, 3, 4, 5, 6, 7, 8, 9} |
При выполнении операции объединения, дубликаты игнорируются, так что только один из двух элементов дубликатов будет отображаться. Например:
Python
x = {1, 2, 3} y = {4, 3, 6} z = {7, 4, 9} output = x.union(y, z) print(output)
1 2 3 4 5 6 7 | x = {1, 2, 3} y = {4, 3, 6} z = {7, 4, 9}
output = x.union(y, z)
print(output) |
Результат:
Python
{1, 2, 3, 4, 6, 7, 9}
{1, 2, 3, 4, 6, 7, 9} |
Оператор |
может также использоваться при поиске объединения двух или более множеств. Например:
Python
months_a = set([«Jan»,»Feb», «March», «Apr», «May», «June»]) months_b = set([«July», «Aug», «Sep», «Oct», «Nov», «Dec»]) print(months_a | months_b)
months_a = set([«Jan»,»Feb», «March», «Apr», «May», «June»]) months_b = set([«July», «Aug», «Sep», «Oct», «Nov», «Dec»])
print(months_a | months_b) |
Результат:
Python
{‘Feb’, ‘Apr’, ‘Sep’, ‘Dec’, ‘Nov’, ‘June’, ‘May’, ‘Oct’, ‘Jan’, ‘July’, ‘March’, ‘Aug’}
{‘Feb’, ‘Apr’, ‘Sep’, ‘Dec’, ‘Nov’, ‘June’, ‘May’, ‘Oct’, ‘Jan’, ‘July’, ‘March’, ‘Aug’} |
Если вы хотите создать объединение из более двух множеств, разделите названия множеств при помощи оператора |
. Взглянем на пример:
Python
x = {1, 2, 3} y = {4, 3, 6} z = {7, 4, 9} print(x | y | z)
x = {1, 2, 3} y = {4, 3, 6} z = {7, 4, 9}
print(x | y | z) |
Результат:
Python
{1, 2, 3, 4, 6, 7, 9}
{1, 2, 3, 4, 6, 7, 9} |
Пересечение множеств
Предположим, у вас есть два множества: А и В. Их пересечение представляет собой множество элементов, которые являются общими для А и для В.
Операция пересечения во множествах может быть достигнута как при помощи оператора &
, так и метода intersection()
. Рассмотрим пример:
Python
x = {1, 2, 3} y = {4, 3, 6} print(x & y) # Результат: 3
x = {1, 2, 3} y = {4, 3, 6}
print(x & y) # Результат: 3 |
В обеих множествах 3
является общим элементом. То же самое может быть достигнуто при использовании метода intersection()
:
Python
x = {1, 2, 3} y = {4, 3, 6} z = x.intersection(y) print(z) # Результат: 3
x = {1, 2, 3} y = {4, 3, 6}
z = x.intersection(y) print(z) # Результат: 3 |
В следующем разделе мы обсудим, как определить разницу между множествами.
Разница между множествами
Предположим, у вас есть два множества: А и В. Разница между А и В (А — В) — это множество со всеми элементами, которые содержатся в А, но не в В. Соответственно, (В — А) — это множество со всеми элементами в В, но не в А.
КОД
Для определения разницы между множествами в Python, мы можем использовать как функцию difference(), так и оператор — . Рассмотрим пример:
Python
set_a = {1, 2, 3, 4, 5} set_b = {4, 5, 6, 7, 8} diff_set = set_a. difference(set_b) print(diff_set)
set_a = {1, 2, 3, 4, 5} set_b = {4, 5, 6, 7, 8} diff_set = set_a.difference(set_b) print(diff_set) |
Результат:
Python
{1, 2, 3}
{1, 2, 3} |
В показанном выше скрипте, только первые три элемента множества set_a
отсутствуют во множестве set_b
, формируя нашу выдачу. Оператор минус -
можно также применить для нахождения разницы между двумя множествами, как показано ниже:
Python
set_a = {1, 2, 3, 4, 5} set_b = {4, 5, 6, 7, 8} print(set_a — set_b)
set_a = {1, 2, 3, 4, 5} set_b = {4, 5, 6, 7, 8} print(set_a — set_b) |
Результат:
Python
{1, 2, 3}
{1, 2, 3} |
Симметричная разница между множествами А и В — это множество с элементами, которые находятся в А и В, за исключением тех элементов, которые являются общими для обеих множеств. set_b)
Результат:
Python
{1, 2, 3, 6, 7, 8}
{1, 2, 3, 6, 7, 8} |
Сравнение множеств
Мы можем сравнить множества в зависимости от того, какие элементы в них содержатся. Таким образом, мы можем сказать, является ли множество родительским, или дочерним от другого множества. Результат такого сравнения будет либо True
, либо False
.
Чтобы проверить, является ли множество А дочерним от В, мы можем выполнить следующую операцию:
Python
A <= B
A <= B |
Чтобы узнать является ли множество В дочерним от А, мы можем выполнить следующую операцию, соответственно:
Python
B >= A
B >= A |
Например:
Python
months_a = set([«Jan», «Feb», «March», «Apr», «May», «June»]) months_b = set([«Jan», «Feb», «March», «Apr», «May», «June», «July», «Aug», «Sep», «Oct», «Nov», «Dec»]) subset_check = months_a <= months_b superset_check = months_b >= months_a print(subset_check) print(superset_check)
1 2 3 4 5 6 7 8 | months_a = set([«Jan», «Feb», «March», «Apr», «May», «June»]) months_b = set([«Jan», «Feb», «March», «Apr», «May», «June», «July», «Aug», «Sep», «Oct», «Nov», «Dec»])
subset_check = months_a <= months_b superset_check = months_b >= months_a
print(subset_check) print(superset_check) |
Результат:
Python
True True
True True |
Дочернее и родительское множество может также быть проверено при помощи методов issubset()
и issuperset()
, как показано ниже:
Python
months_a = set([«Jan»,»Feb», «March», «Apr», «May», «June»]) months_b = set([«Jan»,»Feb», «March», «Apr», «May», «June», «July», «Aug», «Sep», «Oct», «Nov», «Dec»]) subset_check = months_a. issubset(months_b) superset_check = months_b.issuperset(months_a) print(subset_check) print(superset_check)
1 2 3 4 5 6 7 8 | months_a = set([«Jan»,»Feb», «March», «Apr», «May», «June»]) months_b = set([«Jan»,»Feb», «March», «Apr», «May», «June», «July», «Aug», «Sep», «Oct», «Nov», «Dec»])
subset_check = months_a.issubset(months_b) superset_check = months_b.issuperset(months_a)
print(subset_check) print(superset_check) |
Результат:
Python
True True
True True |
В следующем разделе мы обсудим некоторые из наиболее часто используемых методов для манипуляции множествами, предоставленных в Python, которые мы не успели упомянуть.
Методы множеств
Python содержит огромное количество встроенных методов, включая следующие:
Метод copy()
Этот метод возвращает копию множества. Например:
Python
string_set = {«Nicholas», «Michelle», «John», «Mercy»} x = string_set.copy() print(x)
string_set = {«Nicholas», «Michelle», «John», «Mercy»} x = string_set.copy()
print(x) |
Результат:
Python
{‘John’, ‘Michelle’, ‘Nicholas’, ‘Mercy’}
{‘John’, ‘Michelle’, ‘Nicholas’, ‘Mercy’} |
Выдача показывает, что х
является копией множества string_set
.
Метод isdisjoint()
Этот метод проверяет, является ли множество пересечением или нет. Если множества не содержат общих элементов, метод возвращает True
, в противном случае — False
. Например:
Python
names_a = {«Nicholas», «Michelle», «John», «Mercy»} names_b = {«Jeff», «Bosco», «Teddy», «Milly»} x = names_a. isdisjoint(names_b) print(x)
names_a = {«Nicholas», «Michelle», «John», «Mercy»} names_b = {«Jeff», «Bosco», «Teddy», «Milly»}
x = names_a.isdisjoint(names_b) print(x) |
Результат:
Python
True
Оба множества не имеют общих элементов, что делает выдачу True
.
Метод len()
Этот метод возвращает длину множества, которая является общим количеством элементов во множестве. Пример:
Python
names_a = {«Nicholas», «Michelle», «John», «Mercy»} print(len(names_a)) # Результат: 4
names_a = {«Nicholas», «Michelle», «John», «Mercy»}
print(len(names_a)) # Результат: 4 |
Выдача показывает, что длина множества является 4.
Frozenset в Python
Frozenset (замороженное множество) – это класс с характеристиками множества, однако, как только элементы становятся назначенными, их нельзя менять. Кортежи могут рассматриваться как неизменяемые списки, в то время как frozenset-ы — как неизменные множества.
Множества являются изменяемыми и нехешируемыми, это значит, что мы не можем использовать их как словарные ключи. Замороженные множества (frozenset) являются хешированными и могут использоваться в качестве ключей словаря.
Для создания замороженного множества, мы используем метод frozenset()
. Давайте создадим два замороженных множества, Х и Y:
Python
X = frozenset([1, 2, 3, 4, 5, 6]) Y = frozenset([4, 5, 6, 7, 8, 9]) print(X) print(Y)
X = frozenset([1, 2, 3, 4, 5, 6]) Y = frozenset([4, 5, 6, 7, 8, 9])
print(X) print(Y) |
Результат:
Python
frozenset({1, 2, 3, 4, 5, 6}) frozenset({4, 5, 6, 7, 8, 9})
frozenset({1, 2, 3, 4, 5, 6}) frozenset({4, 5, 6, 7, 8, 9}) |
Замороженные множества поддерживают использование множественных методов Python, таких как copy()
, difference()
, symmetric_difference()
, isdisjoint()
, issubset()
, intersection()
, issuperset()
и union()
.
Вывод
Данная статья предоставляет подробное введение во множества языка программирования Python. Математическое определение множеств аналогично определению множеств в Python.
Множество — это набор элементов в произвольном порядке. Само по себе, множество является изменяемым, однако его элементы являются неизменяемыми.
Однако, мы можем добавлять и убирать элементы из множества без каких-либо проблем. В большей структур данных элементы являются индексированными. Однако, элементы множеств не являются индексированными. Это делает невозможным для нас выполнять операции, которые направлены на определенные элементы множества.
Vasile Buldumac
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: [email protected]
Образование
Universitatea Tehnică a Moldovei (utm.md)
- 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»
Python: Set/Frozenset (Множество)
Статья проплачена кошками — всемирно известными производителями котят.
Если статья вам понравилась, то можете поддержать проект.
В статье использовались текст и картинки из Python и теория множеств
Множество (класс set) — это контейнер, который содержит уникальные не повторяющиеся элементы в случайном порядке (неупорядоченная коллекция).
Что значит неупорядоченная? Это значит, что два множества эквивалентны, если содержат одинаковые элементы.
Элементы множества должны быть уникальными, множество не может содержать одинаковых элементов. Добавление элементов, которые уже есть в множестве, не изменяет это множество.
Для множеств используются фигурные скобки, как у словарей. Достаточно перечислить элементы в скобках.
mySet = {'c', 'a', 't'} # выводится в любом случайном порядке print(mySet) # {'t', 'c', 'a'}
Но таким способом нельзя создать пустое множество, вместо него будет создан пустой словарь.
wrong_empty_set = {} print(type(wrong_empty_set)) # <class "dict">
Для создания пустого множества нужно непосредственно использовать set():
correct_empty_set = set() print(type(correct_empty_set)) # <class "set">
Также в set() можно передать какой-либо объект, по которому можно пройтись (Iterable):
color_list = ["red", "green", "green", "blue", "purple", "purple"] color_set = set(color_list) print(color_set) # порядок может быть другим # {"red", "purple", "blue", "green"}
Число элементов вычисляется через len().
Существует ограничение, что элементами множества (как и ключами словарей) в Python могут быть только так называемые хешируемые (Hashable) объекты. Это обусловлено тем фактом, что внутренняя реализация set основана на хеш-таблицах. Например, списки и словари – это изменяемые объекты, которые не могут быть элементами множеств. Большинство неизменяемых типов в Python (int, float, str, bool, и т.д.) – хешируемые. Неизменяемые коллекции, например tuple, являются хешируемыми, если хешируемы все их элементы.
Проверить принадлежит ли какой-либо объект множеству можно с помощью оператора in.
tremendously_huge_set = {"red", "green", "blue"} if "green" in tremendously_huge_set: print("Green is there!") else: print("Unfortunately, there is no green...")
Множество удобно использовать для удаления повторяющихся элементов. Создадим список с элементами, которые повторяются по несколько раз и сконвертируем его во множество. На этот раз множество создадим через метод set().
words = ['a', 'a', 'b', 'b', 'c', 'd', 'e'] mySet = set(words) print(str(mySet))
Перебор элементов.
colors = {"red", "green", "blue"} for color in colors: print(color)
Два множества называются равными, если они состоят из одних и тех же элементов, порядок этих элементов не важен. Обратите внимание, что состав множеств отличается, но тем не менее они одинаковы (см. начало статьи).
my_cats = {"bear", "pig", "cat", "cat"} your_cats = {"pig", "pig", "bear", "cat", "cat"} print(my_cats == your_cats) # True
Если два множества не имеют общих элементов, то говорят, что эти множества не пересекаются и пересечение этих множеств является пустым множеством.
even_numbers = {i for i in range(10) if i % 2 == 0} odd_numbers = {i for i in range(10) if i % 2 == 1} # Очевидно, что множества чётных и нечётных чисел не пересекаются if even_numbers. isdisjoint(odd_numbers): print("Множества не пересекаются!") # Множества не пересекаются!
Подмножество множества S – это такое множество, каждый элемент которого является также и элементом множества S. Множество S в свою очередь является надмножеством исходного множества.
# Множество чисел Фибоначчи меньших 100 fibonacci_numbers = {0, 1, 2, 3, 34, 5, 8, 13, 21, 55, 89} # Множество натуральных чисел меньших 100 natural_numbers = set(range(100)) # Множество чисел Фибоначчи является подмножеством множества # натуральных чисел if fibonacci_numbers.issubset(natural_numbers): print("Подмножество!") # Вывод: Подмножество! # В свою очередь множество натуральных чисел является # надмножеством множества чисел Фибоначчи if natural_numbers.issuperset(fibonacci_numbers): print("Надмножество!") # Вывод: Надмножество!
Пустое множество является подмножеством абсолютно любого множества. Само множество является подмножеством самого себя.
Другие методы: ‘clear’ (очистка множества), ‘copy’, ‘pop’ (удаляет первый элемент из множества. Так как множества не упорядочены, нельзя точно сказать, какой элемент будет первым), ‘remove’, ‘update’, ‘__bases__’, ‘__contains__’, ‘add’, ‘difference’, ‘difference_update’, ‘discard’, ‘intersection’ (пересечение), ‘intersection_update’, ‘isdisjoint’ (истина, если set и other не имеют общих элементов), ‘issubset’, ‘issuperset’, ‘symmetric_difference’, ‘symmetric_difference_update’, ‘union’ (объединение нескольких множеств).
У множеств можно находить объединение или пересечение элементов.
Объединение множеств – это множество, которое содержит все элементы исходных множеств. В Python есть несколько способов объединить множества.
my_fruits = {"apple", "orange"} your_fruits = {"orange", "banana", "pear"} # Для объединения множеств можно использовать оператор `|`, # оба операнда должны быть объектами типа set our_fruits = my_fruits | your_fruits print(our_fruits) # Вывод (порядок может быть другим): {"apple", "banana", "orange", "pear"} # Также можно использовать метод union. # Отличие состоит в том, что метод union принимает не только # объект типа set, а любой iterable-объект you_fruit_list: list = list(your_fruits) our_fruits: set = my_fruits.union(you_fruit_list) print(our_fruits) # Вывод (порядок может быть другим): {"apple", "banana", "orange", "pear"}
Добавление элементов в множество можно рассматривать как частный случай объединения множеств за тем исключением, что добавление элементов изменяет исходное множество, а не создаёт новый объект.
colors = {"red", "green", "blue"} # Метод add добавляет новый элемент в множество colors.add("purple") # Добавление элемента, который уже есть в множестве, не изменяет # это множество colors.add("red") print(colors) # Вывод (порядок может быть другим): {"red", "green", "blue", "purple"} # Метод update принимает iterable-объект (список, словарь, генератор и т.п.) # и добавляет все элементы в множество numbers = {1, 2, 3} numbers. update(i**2 for i in [1, 2, 3]) print(numbers) # Вывод (порядок может быть другим): {1, 2, 3, 4, 9}
Пересечение множеств – это множество, в котором находятся только те элементы, которые принадлежат исходным множествам одновременно.
def is_prime(number: int) -> bool: """ Возвращает True, если number - это простое число """ assert number > 1 return all(number % i for i in range(2, int(number**0.5) + 1)) def is_fibonacci(number: int) -> bool: """ Возвращает True, если number - это число Фибоначчи """ assert number > 1 a, b = 0, 1 while a + b
Разность двух множеств – это множество, в которое входят все элементы первого множества, не входящие во второе множество.
i_know: set = {"Python", "Go", "Java"} you_know: dict = { "Go": 0.4, "C++": 0.6, "Rust": 0.2, "Java": 0.9 } # Обратите внимание, что оператор `-` работает только # для объектов типа set you_know_but_i_dont = set(you_know) - i_know print(you_know_but_i_dont) # Вывод (порядок может быть другим): {"Rust", "C++"} # Метод difference может работать с любым iterable-объектом, # каким является dict, например i_know_but_you_dont = i_know. difference(you_know) print(i_know_but_you_dont) # Вывод: {"Python"}
Удаление элемента из множества можно рассматривать как частный случай разности, где удаляемый элемент – это одноэлементное множество. Следует отметить, что удаление элемента, как и в аналогичном случае с добавлением элементов, изменяет исходное множество.
fruits = {"apple", "orange", "banana"} # Удаление элемента из множества. Если удаляемого элемента # нет в множестве, то ничего не происходит fruits.discard("orange") fruits.discard("pineapple") print(fruits) # Вывод (порядок может быть другим): {"apple", "banana"} # Метод remove работает аналогично discard, но генерирует исключение, # если удаляемого элемента нет в множестве fruits.remove("pineapple") # KeyError: "pineapple"
Симметрическая разность множеств – это множество, включающее все элементы исходных множеств, не принадлежащие одновременно обоим исходным множествам. , также существует два специальных метода – symmetric_difference и symmetric_difference_update. Оба этих метода принимают iterable-объект в качестве аргумента, отличие же состоит в том, что symmetric_difference возвращает новый объект-множество, в то время как symmetric_difference_update изменяет исходное множество.
non_positive = {-3, -2, -1, 0} non_negative = range(4) non_zero = non_positive.symmetric_difference(non_negative) print(non_zero) # Вывод (порядок может быть другим): {-1, -2, -3, 1, 2, 3} # Метод symmetric_difference_update изменяет исходное множество colors = {"red", "green", "blue"} colors.symmetric_difference_update(["green", "blue", "yellow"]) print(colors) # Вывод (порядок может быть другим): {"red", "yellow"}
frozenset — это неизменяемое множество.
Методы: ‘__name__’, ‘copy’, ‘__bases__’, ‘__contains__’, ‘difference’, ‘intersection’, ‘isdisjoint’, ‘issubset’, ‘issuperset’, ‘symmetric_difference’, ‘union’.
Создадим два разных типа множества, сравним их и попытаемся добавить новые элементы.
setCat = set('кот') frozenCat = frozenset('кот') print(setCat == frozenCat) print(type(setCat)) # set print(type(frozenCat)) #frozenset setCat.add('э') # можем добавить print(setCat) frozenCat.add('e') # эта строка вызовет ошибку при компиляции
Реклама
Python | Множества
Последнее обновление: 31.06.2017
Множество (set) представляют еще один вид набора, который хранит только уникальные элементы. Для определения множества используются фигурные скобки, в которых перечисляются элементы:
users = {"Tom", "Bob", "Alice", "Tom"} print(users) # {"Alice", "Bob", "Tom"}
Обратите внимание, что несмотря на то, что функция print вывела один раз элемент «Tom», хотя в определении множества этот элемент содержится два раза. Все потому что множество содержит только уникальные значения.
Также для определения множества может применяться функция set(), в которую передается список или кортеж элементов:
people = ["Mike", "Bill", "Ted"] users = set(people) print(users) # {"Mike", "Bill", "Ted"}
Функцию set удобно применять для создания пустого множества:
users = set()
Для получения длины множества применяется встроенная функция len():
users = {"Tom", "Bob", "Alice"} print(len(users)) # 3
Добавление элементов
Для добавления одиночного элемента вызывается метод add():
users = set() users.add("Sam") print(users)
Удаление элементов
Для удаления одного элемента вызывается метод remove(), в который передается удаляемый элемент. Но следует учитывать, что если такого элемента не окажется в множестве, то будет сгенерирована ошибка. Поэтому перед удалением следует проверять на наличие элемента с помощью оператора in:
users = {"Tom", "Bob", "Alice"} user = "Tom" if user in users: users. remove(user) print(users) # {"Bob", "Alice"}
Также для удаления можно использовать метод discard(), который не будет генерировать исключения при отсутствии элемента:
users = {"Tom", "Bob", "Alice"} users.discard("Tim") # элемент "Tim" отсутствует, и метод ничего не делает print(users) # {"Tom", "Bob", "Alice"} users.discard("Tom") # элемент "Tom" есть, и метод удаляет элемент print(users) # {"Bob", "Alice"}
Для удаления всех элементов вызывается метод clear():
users.clear()
Перебор множества
Для перебора элементов можно использовать цикл for:
users = {"Tom", "Bob", "Alice"} for user in users: print(user)
При переборе каждый элемент помещается в переменную user.
Операции с множествами
С помощью метода copy() можно скопировать содержимое одного множества в другую переменную:
users = {"Tom", "Bob", "Alice"} students = users. copy() print(students) # {"Tom", "Bob", "Alice"}
Метод union() объединяет два множества и возвращает новое множество:
users = {"Tom", "Bob", "Alice"} users2 = {"Sam", "Kate", "Bob"} users3 = users.union(users2) print(users3) # {"Bob", "Alice", "Sam", "Kate", "Tom"}
Пересечение множеств позволяет получить только те элементы, которые есть одновременно в обоих множествах. Метод intersection() производит операцию пересечения множеств и возвращает новое множество:
users = {"Tom", "Bob", "Alice"} users2 = {"Sam", "Kate", "Bob"} users3 = users.intersection(users2) print(users3) # {"Bob"}
Вместо метода intersection мы могли бы использовать операцию логического умножения:
users = {"Tom", "Bob", "Alice"} users2 = {"Sam", "Kate", "Bob"} print(users & users2) # {"Bob"}
В этом случае мы получили бы тот же результат.
Еще одна операция — разность множеств возвращает те элементы, которые есть в первом множестве, но отсутствуют во втором. Для получения разности множеств можно использовать метод difference или операцию вычитания:
users = {"Tom", "Bob", "Alice"} users2 = {"Sam", "Kate", "Bob"} users3 = users.difference(users2) print(users3) # {"Tom", "Alice"} print(users - users2) # {"Tom", "Alice"}
Отдельная разновидность разности множеств — симметрическая разность производится с помощью метода symmetric_difference(). Она возвращает все элементы обоих множеств за исключением общих:
users = {"Tom", "Bob", "Alice"} users2 = {"Sam", "Kate", "Bob"} users3 = users.symmetric_difference(users2) print(users3) # {"Tom", "Alice", "Sam", "Kate"}
Отношения между множествами
Метод issubset позволяет выяснить, является ли текущее множество подмножеством (то есть частью) другого множества:
users = {"Tom", "Bob", "Alice"} superusers = {"Sam", "Tom", "Bob", "Alice", "Greg"} print(users. issubset(superusers)) # True print(superusers.issubset(users)) # False
Метод issuperset, наоборот, возвращает True, если текущее множество является надмножеством (то есть содержит) для другого множества:
users = {"Tom", "Bob", "Alice"} superusers = {"Sam", "Tom", "Bob", "Alice", "Greg"} print(users.issuperset(superusers)) # False print(superusers.issuperset(users)) # True
frozen set
Тип frozen set является видом множеств, которое не может быть изменено. Для его создания используется функция frozenset:
users = frozenset({"Tom", "Bob", "Alice"})
В функцию frozenset передается набор элементов — список, кортеж, другое множество.
В такое множество мы не можем добавить новые элементы, как и удалить из него уже имеющиеся. Собственно поэтому frozen set поддерживает ограниченный набор операций:
len(s)
: возвращает длину множестваx in s
: возвращает True, если элемент x присутствует в множестве sx not in s
: возвращает True, если элемент x отсутствует в множестве ss. issubset(t)
: возвращает True, если t содержит множество ss.issuperset(t)
: возвращает True, если t содержится в множестве s
: возвращает объединение множеств s и ts.union(t)
s.intersection(t)
: возвращает пересечение множеств s и ts.difference(t)
: возвращает разность множеств s и ts.copy()
: возвращает копию множества s
НазадСодержаниеВперед
Наборы в Python — GeeksforGeeks
Набор — это неупорядоченный тип данных коллекции, который является итерируемым, изменяемым и не имеет повторяющихся элементов.
Набор определен в { }
Основное преимущество использования набора по сравнению со списком заключается в том, что он имеет оптимизированный метод проверки того, содержится ли конкретный элемент в наборе. Это основано на структуре данных, известной как хеш-таблица. Поскольку множества неупорядочены, мы не можем получить доступ к элементам с помощью индексов, как в списках.
Examples of Sets
Python3
|
Вывод:
set
Методы set() используются для преобразования типов в Python.
Python3
|
Output:
{'c', 'b', 'а'} {'г', 'в', 'б', 'а'}
Замороженные наборы Python
Замороженные наборы в Python — это неизменяемые объекты, которые поддерживают только методы и операторы, которые производят результат, не затрагивая фиксированный набор или наборы, к которым они применяются. Это можно сделать с помощью метода Frozenset() в Python.
Хотя элементы набора можно изменить в любое время, элементы замороженного набора остаются неизменными после создания.
Если параметры не переданы, возвращается пустой замороженный набор.
Питон
|
Вывод:
Нормальный набор установить(['а', 'с', 'б']) Замороженный набор Frozenset(['e', 'g', 'f'])
Внутренняя работа Set
Это основано на структуре данных, известной как хеш-таблица.
Если несколько значений присутствуют в одной и той же позиции индекса, то значение добавляется к этой позиции индекса для формирования связанного списка. В Python Sets реализованы с использованием словаря с фиктивными переменными, где ключевыми являются члены, установленные с большей оптимизацией временной сложности.
Реализация набора:
Наборы с многочисленными операциями над одной хеш-таблицей:
Методы для наборов
Добавление элементов
Вставка в набор выполняется с помощью функции set.add(), где создается соответствующее значение записи для сохранения в хеш-таблице. То же, что и при проверке элемента, т. е. в среднем O(1). Однако в худшем случае это может стать O (n).
Python3
|
Output :
Люди: {'Идриш', 'Арчи', 'Джей'} Установить после добавления элемента: {1, 2, 3, 4, 5, 'Идриш', 'Арчи', 'Джей', 'Даксит'}
Union
Два набора можно объединить с помощью функции union() или | оператор. Доступ к обоим значениям хеш-таблицы и их обход осуществляется с помощью операции слияния, выполняемой над ними для объединения элементов, в то же время дубликаты удаляются. Временная сложность этого O (len (s1) + len (s2)), где s1 и s2 — два набора, объединение которых необходимо выполнить.
Python3
|
Вывод:
Функция Union() {'Каран', 'Идриш', 'Джей', 'Арджун', 'Арчил'} Союз с использованием '|' оператор {'Deepanshu', 'Idrish', 'Jay', 'Raju', 'Archil'}
Intersection
Это можно сделать с помощью оператора cross() или &. Выбраны общие элементы. Они аналогичны перебору списков хешей и объединению одних и тех же значений в обеих таблицах. Временная сложность этого O(min(len(s1), len(s2)) где s1 и s2 — два набора, объединение которых необходимо выполнить.
Python3
9003 0019 Диапазон |
Output:
Пересечение с использованием функции пересечения() {3, 4} Пересечение с использованием оператора '&' {3, 4}
Разница
Чтобы найти разницу между наборами. Аналогично поиску различий в связанном списке. Это делается через разницу() или – оператор. Временная сложность поиска разницы s1 – s2 равна O(len(s1))
Python3
9003 0019 Диапазон
|
Вывод:
Разница двух наборов с использованием функции разность() {0, 1, 2} Разница двух наборов с помощью оператора «-» {0, 1, 2}
Очистка наборов
Метод Clear() очищает весь набор.
Python3
|
9999999999999999999999999999999999999995AIN999999999999999995AIN 9999999999999999999999995SLIN
{1, 2, 3, 4, 5, 6}
Установить после использования функции clear()
set() Однако в наборах Python есть две основные ловушки: Наборы и замороженные наборы поддерживают следующие операторы: Фрагмент кода для иллюстрации всех операций Set в Python Выход: Последние статьи о Python Set. Наборы — это изменяемые неупорядоченные наборы уникальных элементов. Обычное использование включает проверку принадлежности, удаление дубликатов из последовательности и вычисление стандартных математических операций над множествами, такими как пересечение, объединение, разность и симметричная разность. Наборы не записывают позицию элемента или порядок вставки. Соответственно, наборы не поддерживают индексирование, нарезку или другое поведение, подобное последовательности. Наборы реализованы с помощью словарей. Они не могут содержать изменяемые элементы, такие как списки или словари. Однако они могут содержать неизменяемые коллекции. Читать документы
v: последний Бесплатный хостинг документов предоставляется Read the Docs. В этом разделе подробно описывается общедоступный API для Этот подтип Это экземпляр Это экземпляр Следующие макросы проверки типов работают с указателями на любой объект Python. Так же,
функции конструктора работают с любым итерируемым объектом Python. Вернуть true, если p является объектом Возвращает true, если p является объектом Возвращает true, если p является объектом Вернуть true, если p является объектом Новое в версии 3.10. Возвращает true, если p является объектом Возвращает true, если p является объектом Вернуть новый набор Вернуть новый Следующие функции и макросы доступны для экземпляров Возвращает длину объекта Форма макроса Возвращает Добавить ключ к экземпляру набора Следующие функции доступны для экземпляров Возврат Time complexity of Sets
Operation Average case Worst Case notes x in s O(1) O(n) Union s|t O(len(s)+len(t)) Пересечение s&t O(min(len(s), len(t)) O(len(s) * len(t)) заменить «min» на «max», если t не является множеством O(l), где l max(len(s1),..,len(sn)) 5 0 для операторов Наборы Разность s-t O(len(s)) Операторы Notes key in s containment check key not in s non-containment check s1 == s2 s1 is equivalent to s2 s1 ! = S2 S1 не эквивалентен S2 S1 <= S2 S1 - подмножество S2 S1 S1 - правильный подраздел S2 S1. 0044 s1 является надмножеством s2 s1 > s2 s1 является правильным надмножеством s2 s1 | S2 Союз S1 и S2 S1 & S2 Пересечение S1 и S2 S1 - S2 Набор элементов в S1, но не S2 4945. Набор элементов в S1, но не S2 44945. набор элементов точно в одном из s1 или s2 Python
set1
=
set
()
set2
=
set
()
for
i
in
range
(
1
,
6
):
set1. add(i)
for
i
in
range
(
3
,
8
):
set2.add(i)
print
(
"Set1 = "
, set1)
print
(
"Set2 = "
, set2)
print
(
"\n"
)
set3
=
набор1 | set2
print
(
"Union of Set1 & Set2: Set3 = "
, set3)
set4
=
set1 & set2
print
(
"Пересечение Set1 и Set2: Set4 = "
, set4)
print
(
"\n"
)
set3 > set4:
print
(
"Set3 is superset of Set4"
)
else
if
set3 < set4:
print
(
"set3 - подмножество Set4"
)
ELSE
:
Печать
(
"SET3 - это SET4"
(
"SET3 - это SET4"
(
"SET3 - это SET4"0019 )
if
set4 < set3:
print
(
"Set4 is subset of Set3"
)
print
(
" \n"
)
set5
=
set3
-
set4
print
(
"Elements in Set3 and not in Set4: Set5 = "
, set5)
Печать
(
"\ n"
)
IF
SET4. ISDISJOINT (SET5):
9003 SET4.ISDISJOINC "Set4 и Set5 не имеют ничего общего \ n"
)
SET5.Clear ()
Печать
(
"После применения Clear On Set Set5:"
)
".0020
Печать
(
"SET5 ="
, SET5)
('SET1 =', SET (1, 3, 4, 4, 5, 5, 5, 4, 5, 5, 4, 5, 4, 5, 4, 5, 4, 4, 5, 4, 4, 5, 4, 4, 5, 4, 4, 5, 4, 4, 5, 4, 4, 5, 4, 4, 5, 4, 4, 5, 4, 5, 4, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5,
('SET1 =', SET (1, 3, 4, 4,
('SET1 ='. ]))
('Set2 = ', установить ([3, 4, 5, 6, 7]))
('Объединение Set1 и Set2: Set3 = ', set([1, 2, 3, 4, 5, 6, 7]))
('Пересечение Set1 и Set2: Set4 = ', set([3, 4, 5]))
Set3 является надмножеством Set4
Set4 является подмножеством Set3
('Элементы в Set3, а не в Set4: Set5 = ', set([1, 2, 6, 7]))
Set4 и Set5 не имеют ничего общего
После применения Clear на наборах Set5:
('Set5 = ', установить([]))
комплект — Справочник по Python (Правильный путь) 0.1 документация
комплект — Справочник по Python (Правильный путь) 0.1 документация Конструкторы
Методы
Добавление элементов
Удаление
Операции набора
Копирование
Набор операторов
Добавление элементов
Реляционные операторы
Установить назначение операций
Функции
Set Objects — Документация по Python 3.10.7
set
и frostset
.
объекты. Любая функциональность, не указанная ниже, лучше всего доступна с помощью
протокол абстрактных объектов (включая PyObject_CallMethod()
, PyObject_RichCompareBool()
, PyObject_Hash()
, PyObject_Repr()
, PyObject_IsTrue()
, PyObject_Print()
и PyObject_GetIter()
) или протокол абстрактных чисел (включая PyNumber_And()
, PyNumber_Subtract()
, PyNumber_Or()
, PyNumber_Xor()
, PyNumber_InPlaceAnd()
, PyNumber_InPlaceSubtract()
, PyNumber_InPlaceOr()
и PyNumber_InPlaceXor()
). PySetObject
PyObject
используется для хранения внутренних данных обоих набор
и замороженный набор
объектов. Это похоже на PyDictObject
в том, что это фиксированный размер для небольших наборов (как хранилище кортежей) и будет
указать на отдельный блок памяти переменного размера для среднего и большого размера
наборы (так же, как хранилище списков). Ни одно из полей этой структуры не должно быть
считаются общедоступными, и все они могут быть изменены. Весь доступ должен осуществляться через
документированный API, а не путем манипулирования значениями в структуре. PySet_Type
PyTypeObject
, представляющий Python комплект
тип. PyFrozenSet_Type
PyTypeObject
, представляющий Python замороженный комплект
тип. PySet_Check
(PyObject * p ) set
или экземпляром подтипа.
Эта функция всегда выполняется успешно. PyFrozenSet_Check
(PyObject * p ) frostset
или экземпляром
подтип. Эта функция всегда выполняется успешно. PyAnySet_Check
(PyObject * p ) set
, объектом frostset
или
экземпляр подтипа. Эта функция всегда выполняется успешно. PySet_CheckExact
(PyObject * стр ) set
, но не экземпляром
подтип. Эта функция всегда выполняется успешно. PyAnySet_CheckExact
(PyObject * p ) set
или объектом frostset
, но
не экземпляр подтипа. Эта функция всегда выполняется успешно. PyFrozenSet_CheckExact
(PyObject * p ) frostset
, но не экземпляром
подтип. Эта функция всегда выполняется успешно. PySet_New
(PyObject * итерируемый )
, содержащий объекты, возвращенные итерируемых . iterable может быть NULL
для создания нового пустого набора. Верните новый набор на
успех или NULL
в случае неудачи. Поднимите TypeError
, если iterable не является
фактически повторяемый. Конструктор также полезен для копирования набора
( с = набор (ы)
). PyFrozenSet_New
(PyObject * итерируемый ) замороженный набор
, содержащий объекты, возвращенные итерацией .
Итерируемый может быть NULL
для создания нового пустого замороженного набора. Вернуть новый
установить в случае успеха или NULL
в случае неудачи. Поднимите TypeError
, если iterable является
на самом деле не повторяемый. комплект
или замороженный набор
или экземпляры их подтипов. PySet_Size
(PyObject * любой набор ) set
или frostset
. Эквивалентно лен (любой набор)
. Вызывает ошибку PyExc_SystemError
, если anyset не является набор
, замороженный набор
или экземпляр подтипа. PySet_GET_SIZE
(PyObject * любой набор ) PySet_Size()
без проверки ошибок. PySet_Contains
(PyObject * anyset , PyObject * ключ ) 1
, если найдено, 0
, если не найдено, и -1
, если обнаружена ошибка. в отличие
Python __contains__()
эта функция автоматически не
конвертировать нехешируемые наборы во временные замороженные наборы. Поднимите TypeError
, если
ключ нельзя хэшировать. Поднимите PyExc_SystemError
, если anyset не является набор
, замороженный набор
или экземпляр подтипа. PySet_Add
(PyObject * набор , PyObject * ключ )
. Также работает с FrozenSet
экземпляры (например, PyTuple_SetItem()
, его можно использовать для заполнения значений
новых замороженных наборов до того, как они будут подвергнуты воздействию другого кода). Возврат 0
на
успех или -1
в случае неудачи. Поднимите TypeError
, если ключ нерасщепляемый. Поднимите MemoryError
, если нет места для роста. Поднять SystemError
, если установлено не является экземпляром набора
или его
подтип. комплект
или его
подтипы, но не экземпляры замороженного набора
или его подтипов. PySet_Discard
(PyObject * набор , PyObject * ключ ) 1
, если найдено и удалено, 0
, если не найдено (никаких действий не предпринимается) и -1
если
встречается ошибка. Не вызывает KeyError
для отсутствующих ключей. Поднять TypeError
, если ключ не может быть хеширован. В отличие от Python discard()
метод, эта функция не преобразует автоматически нехешируемые наборы в
временные заморозки. Поднять PyExc_SystemError
, если установить не является
Экземпляр устанавливает
или его подтип. PySet_Pop
(PyObject * комплект )