Содержание

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

Только что мы создали множество чисел. Мы также можем создать множество из строк. Например:

Python

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}

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

Python

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«, а это означает, что элемент был найден во множестве.

Аналогичным образом, при поиске элемента, который отсутствует во множестве, мы получим «False«, как показано ниже:

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

Как и ожидалось, код вернул «

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)

Результат:

Python

{‘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 присутствует в множестве s

  • x not in s: возвращает True, если элемент x отсутствует в множестве s

  • s. issubset(t): возвращает True, если t содержит множество s

  • s.issuperset(t): возвращает True, если t содержится в множестве s

  • s.union(t)

    : возвращает объединение множеств s и t
  • s.intersection(t): возвращает пересечение множеств s и t

  • s.difference(t): возвращает разность множеств s и t

  • s.copy(): возвращает копию множества s

НазадСодержаниеВперед

Наборы в Python — GeeksforGeeks

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

Набор определен в { }

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

Examples of Sets

Python3

var = { "Geeks" , "for" , "Geeks" }

type (var)

Вывод:

 set 

Методы set() используются для преобразования типов в Python.

Python3

 

myset = set ([ "a" , "b" , "c" ])

print (myset)

 

myset. add( "d" )

print (myset)

Output:  

 {'c', 'b', 'а'}
{'г', 'в', 'б', 'а'} 

 

Замороженные наборы Python

Замороженные наборы в Python — это неизменяемые объекты, которые поддерживают только методы и операторы, которые производят результат, не затрагивая фиксированный набор или наборы, к которым они применяются. Это можно сделать с помощью метода Frozenset() в Python.

Хотя элементы набора можно изменить в любое время, элементы замороженного набора остаются неизменными после создания.

Если параметры не переданы, возвращается пустой замороженный набор.

Питон

 

normal_set = set ([ "a" , "b" , "c" ])

 

print ( "Normal Set" )

print (normal_set)

 

frozen_set = frozenset ([ "e" , "f" , "g" ])

 

print ( "\nFrozen Set" )

print (frozen_set)

 

Вывод:  

 Нормальный набор
установить(['а', 'с', 'б'])
Замороженный набор
Frozenset(['e', 'g', 'f']) 

 

Внутренняя работа Set

Это основано на структуре данных, известной как хеш-таблица.
Если несколько значений присутствуют в одной и той же позиции индекса, то значение добавляется к этой позиции индекса для формирования связанного списка. В Python Sets реализованы с использованием словаря с фиктивными переменными, где ключевыми являются члены, установленные с большей оптимизацией временной сложности.

Реализация набора:

 

Наборы с многочисленными операциями над одной хеш-таблицей:

Методы для наборов

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

Вставка в набор выполняется с помощью функции set.add(), где создается соответствующее значение записи для сохранения в хеш-таблице. То же, что и при проверке элемента, т. е. в среднем O(1). Однако в худшем случае это может стать O (n).

Python3

 

people = { "Jay" , "Idrish" , "Archi" }

 

print ( "Люди:" , конец = "" )

Печать (люди)

PEONE. ADD (

. )

для I в Диапазон ( 1 , 6 ): 9003

2020202019 ). 1 .D.D.D. 1202019 ).0003

print ( "\nSet after adding element:" , end = " " )

print (people)

Output :  

 Люди: {'Идриш', 'Арчи', 'Джей'}
Установить после добавления элемента: {1, 2, 3, 4, 5, 'Идриш', 'Арчи', 'Джей', 'Даксит'} 

 

Union

Два набора можно объединить с помощью функции union() или | оператор. Доступ к обоим значениям хеш-таблицы и их обход осуществляется с помощью операции слияния, выполняемой над ними для объединения элементов, в то же время дубликаты удаляются. Временная сложность этого O (len (s1) + len (s2)), где s1 и s2 — два набора, объединение которых необходимо выполнить.
 

Python3

 

people = { "Jay" , "Idrish" , "Archil" }

vampires = { "Karan" , "Arjun" }

dracula = { "Deepanshu" , "Raju" }

 

population = people. union(vampires)

 

print ( "Union using union() function" )

print (популяция)

Популяция = человек | Dracula

Печать ( »\ NUNION с использованием '|0020 )

print (население)

Вывод:  

 Функция Union()
{'Каран', 'Идриш', 'Джей', 'Арджун', 'Арчил'}
Союз с использованием '|' оператор
{'Deepanshu', 'Idrish', 'Jay', 'Raju', 'Archil'} 

 

Intersection

Это можно сделать с помощью оператора cross() или &. Выбраны общие элементы. Они аналогичны перебору списков хешей и объединению одних и тех же значений в обеих таблицах. Временная сложность этого O(min(len(s1), len(s2)) где s1 и s2 — два набора, объединение которых необходимо выполнить.

Python3

 

set1 = set ()

set2 = set ()

 

for i В Диапазон ( 5 ):

SET1.Add (I)

9003

для I в

для I

I

I

I

I

I

0019 Диапазон ( 3 , ):

SET2. ADD (I)

SET3 20202019.INERSERESERESTERSERESERESERESERESERESTERSERESERESERESTER .1 2.1.INERESERESTERSERESTERSERESTERSERESTERSERESTER

.

 

print ( "Intersection using intersection() function" )

print (set3)

 

set3 = set1 & set2

 

print ( "\nIntersection using '&' operator" )

print (set3)

Output:  

 Пересечение с использованием функции пересечения()
{3, 4}
Пересечение с использованием оператора '&'
{3, 4} 

 

Разница

Чтобы найти разницу между наборами. Аналогично поиску различий в связанном списке. Это делается через разницу() или – оператор. Временная сложность поиска разницы s1 – s2 равна O(len(s1))

Python3

 

set1 = set ()

set2 = set ()

 

for i В Диапазон ( 5 ):

SET1.Add (I)

9003

для I в

для I

I

I

I

I

I

0019 Диапазон ( 3 , ):

SET2. ADD (I)

SET3 30203

SET3 202039203

SET3 20203

.

Печать ( "Разница в двух наборах с использованием различий () Функция" )

Печать (SET3)

SET3 =

SET3 =

SET3 =

=

0020 set1 - set2

 

print ( "\nDifference of two sets using '-' operator" )

print (set3)

Вывод:  

 Разница двух наборов с использованием функции разность()
{0, 1, 2}
Разница двух наборов с помощью оператора «-»
{0, 1, 2} 

 

Очистка наборов

Метод Clear() очищает весь набор.

Python3

 

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

 

print ( "Initial set" )

print (set1)

 

set1.clear()

Print ( "\ NSET после использования функции Clear ()" )

Print (SET1)

9999999999999999999999999999999999999995AIN999999999999999995AIN 9999999999999999999999995SLIN {1, 2, 3, 4, 5, 6} Установить после использования функции clear() set()

 

Однако в наборах Python есть две основные ловушки:

  1. Набор не поддерживает элементы в каком-либо определенном порядке.
  2. В набор Python можно добавлять только экземпляры неизменяемых типов.

Time complexity of Sets

5 0 для операторов Наборы

Наборы и замороженные наборы поддерживают следующие операторы:

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))  
Разность s-t O(len(s))    
494544945
Операторы 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. Набор элементов в S1, но не S2. набор элементов точно в одном из s1 или s2

Фрагмент кода для иллюстрации всех операций Set в Python

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" )

9 0 9 0 9 0 10 9 9  0020 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 Set.


комплект — Справочник по Python (Правильный путь) 0.1 документация

комплект — Справочник по Python (Правильный путь) 0.1 документация

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

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

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

Конструкторы

set()
Возвращает тип набора, инициализированный из iterable.
{} установить понимание
Возвращает набор на основе существующих итераций.
буквенный синтаксис
Инициализирует новый экземпляр типа set .

Методы

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

добавить
Добавляет указанный элемент в набор.
обновление
Добавляет указанные элементы в набор.

Удаление

удаление
Удаляет элемент из набора.
удалить
Удаляет элемент из набора (выдает KeyError , если не найден).
поп
Удаляет и возвращает произвольный элемент из набора.
прозрачный
: Удаляет все элементы из набора.

Операции набора

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

Копирование

копирование
Возвращает копию набора.

Набор операторов

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

|= (обновление)
Добавляет элементы из другого набора.

Реляционные операторы

== (равно)
Возвращает логическое значение, указывающее, содержит ли набор те же элементы, что и другой набор.
!= (не равно)
Возвращает логическое значение, указывающее, содержит ли набор элементы, отличные от элементов другого набора.
<= (подмножество)
Возвращает логическое значение, указывающее, содержится ли набор в другом наборе.
< (собственно подмножество)
Возвращает логическое значение, указывающее, содержится ли набор в указанном наборе и что наборы не равны.
>= (использовать надмножество)
Возвращает логическое значение, указывающее, содержит ли набор другой набор.
> (собственный набор)
Возвращает логическое значение, указывающее, содержит ли набор другой набор и что наборы не равны. 9(симметричная_разница)
Возвращает новый набор с элементами либо из набора, либо из другого набора, но не из обоих.
| (союз)
Возвращает новый набор с элементами из набора и другого набора.

Установить назначение операций

-= (difference_update)
Обновляет набор, удаляя элементы из другого набора.
&= (intersection_update)
Обновляет набор, сохраняя только элементы, найденные в нем и в другом наборе. 9= (симметричное_difference_update)
Обновляет набор, сохраняя только элементы, найденные в одном или другом наборе, но не в обоих.

Функции

длинный
Возвращает тип int, указывающий количество элементов в коллекции.
мин
Возвращает наименьший элемент из коллекции.
максимум
Возвращает самый большой элемент в итерируемом объекте или самый большой из двух или более аргументов.
сумма
Возвращает общее количество элементов, содержащихся в итерируемом объекте.
отсортировано
Возвращает отсортированный список из итерируемого объекта.
наоборот
Возвращает обратный итератор для последовательности.
все
Возвращает логическое значение, указывающее, содержит ли коллекция только значения, которые оцениваются как True.
любой
Возвращает логическое значение, указывающее, содержит ли коллекция какие-либо значения, которые оцениваются как True.
перечислить
Возвращает перечисляемый объект.
почтовый индекс
Возвращает список кортежей, где i-й кортеж содержит i-й элемент из каждой из последовательностей аргументов или итераций.

Читать документы v: последний

Версии
последний
Загрузки
пдф
htmlzip
epub
При прочтении документов
Дом проекта
Строит

Бесплатный хостинг документов предоставляется Read the Docs.

Set Objects — Документация по Python 3.10.7

В этом разделе подробно описывается общедоступный API для 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, а не путем манипулирования значениями в структуре.

PyTypeObject PySet_Type
Часть стабильного ABI.

Это экземпляр PyTypeObject , представляющий Python комплект тип.

PyTypeObject PyFrozenSet_Type
Часть стабильного ABI.

Это экземпляр PyTypeObject , представляющий Python замороженный комплект тип.

Следующие макросы проверки типов работают с указателями на любой объект Python. Так же, функции конструктора работают с любым итерируемым объектом Python.

int PySet_Check (PyObject * p )

Вернуть true, если p является объектом set или экземпляром подтипа. Эта функция всегда выполняется успешно.

int PyFrozenSet_Check (PyObject * p )

Возвращает true, если p является объектом frostset или экземпляром подтип. Эта функция всегда выполняется успешно.

int PyAnySet_Check (PyObject * p )

Возвращает true, если p является объектом set , объектом frostset или экземпляр подтипа. Эта функция всегда выполняется успешно.

int PySet_CheckExact (PyObject * стр )

Вернуть true, если p является объектом set , но не экземпляром подтип. Эта функция всегда выполняется успешно.

Новое в версии 3.10.

int PyAnySet_CheckExact (PyObject * p )

Возвращает true, если p является объектом set или объектом frostset , но не экземпляр подтипа. Эта функция всегда выполняется успешно.

int PyFrozenSet_CheckExact (PyObject * p )

Возвращает true, если p является объектом frostset , но не экземпляром подтип. Эта функция всегда выполняется успешно.

PyObject * PySet_New (PyObject * итерируемый )
Возвращаемое значение: Новая ссылка. Часть стабильного ABI.

Вернуть новый набор , содержащий объекты, возвращенные итерируемых . iterable может быть NULL для создания нового пустого набора. Верните новый набор на успех или NULL в случае неудачи. Поднимите TypeError , если iterable не является фактически повторяемый. Конструктор также полезен для копирования набора ( с = набор (ы) ).

PyObject * PyFrozenSet_New (PyObject * итерируемый )
Возвращаемое значение: Новая ссылка. г. Часть стабильного ABI.

Вернуть новый замороженный набор , содержащий объекты, возвращенные итерацией . Итерируемый может быть NULL для создания нового пустого замороженного набора. Вернуть новый установить в случае успеха или NULL в случае неудачи. Поднимите TypeError , если iterable является на самом деле не повторяемый.

Следующие функции и макросы доступны для экземпляров комплект или замороженный набор или экземпляры их подтипов.

Py_ssize_t PySet_Size (PyObject * любой набор )
Часть стабильного ABI.

Возвращает длину объекта set или frostset . Эквивалентно лен (любой набор) . Вызывает ошибку PyExc_SystemError , если anyset не является набор , замороженный набор или экземпляр подтипа.

Py_ssize_t PySet_GET_SIZE (PyObject * любой набор )

Форма макроса PySet_Size() без проверки ошибок.

int PySet_Contains (PyObject * anyset , PyObject * ключ )
Часть стабильного ABI.

Возвращает 1 , если найдено, 0 , если не найдено, и -1 , если обнаружена ошибка. в отличие Python __contains__() эта функция автоматически не конвертировать нехешируемые наборы во временные замороженные наборы. Поднимите TypeError , если ключ нельзя хэшировать. Поднимите PyExc_SystemError , если anyset не является набор , замороженный набор или экземпляр подтипа.

int PySet_Add (PyObject * набор , PyObject * ключ )
Часть стабильного ABI.

Добавить ключ к экземпляру набора . Также работает с FrozenSet экземпляры (например, PyTuple_SetItem() , его можно использовать для заполнения значений новых замороженных наборов до того, как они будут подвергнуты воздействию другого кода). Возврат 0 на успех или -1 в случае неудачи. Поднимите TypeError , если ключ нерасщепляемый. Поднимите MemoryError , если нет места для роста. Поднять SystemError , если установлено не является экземпляром набора или его подтип.

Следующие функции доступны для экземпляров комплект или его подтипы, но не экземпляры замороженного набора или его подтипов.

int PySet_Discard (PyObject * набор , PyObject * ключ )
Часть стабильного ABI.

Возврат 1 , если найдено и удалено, 0 , если не найдено (никаких действий не предпринимается) и -1 если встречается ошибка. Не вызывает KeyError для отсутствующих ключей. Поднять TypeError , если ключ не может быть хеширован. В отличие от Python discard() метод, эта функция не преобразует автоматически нехешируемые наборы в временные заморозки. Поднять PyExc_SystemError , если установить не является Экземпляр устанавливает или его подтип.

PyObject * PySet_Pop (PyObject * комплект )
Возвращаемое значение: Новая ссылка.