Учебное пособие по Python - Набор типов данных

Jinku Hu 30 Январь 2023 18 Апрель 2020
  1. Создать наборы Python
  2. Обновление набора Python
  3. Удаление элементов из набора Python
  4. Операции с набором Python
  5. Методы Pythonых множеств
  6. Другие операции по установке Python
  7. Встроенные функции набора Python
  8. Python Фрозенсет
Учебное пособие по Python - Набор типов данных

В этом разделе вы узнаете, как создавать сеты на Python и как добавлять и удалять элементы из сетов.

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

Информация
set - это изменяемый объект, так что вы можете добавлять и удалять элементы из множества.

Создать наборы Python

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

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

>>> x = {3, 5, 7, 2, 4, 5}		
>>> print(x)		#prints the set variable
{2, 3, 4, 5, 7}
>>> print(type(x))		#checking type of x
<class 'set'>

Для создания пустого списка можно использовать метод set() с пустыми параметрами. Если Вы пишете {} для создания пустого объекта, то он интерпретируется как словарь:

>>> x = {}
>>> print(type(x))
<class 'dict'>

>>> x = set()
>>> print(type(x))
<class 'set'>

Обновление набора Python

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

Одиночный элемент может быть добавлен в множество с помощью метода add(). Если Вы хотите добавить более одного элемента в множество, то необходимо использовать метод update().

>>> s = {2, 4}
>>> print(s)
{2, 4}

>>> s.add(6)
>>> print(s)
{2, 4, 6}

>>> s.update([2, 4, 6])
>>> print(s)
{2, 4, 6}

>>> s.update([5,6], {7, 8, 9})
>>> print(s)
{2, 4, 5, 6, 7, 8, 9}

Удаление элементов из набора Python

Для удаления элемента из множества можно использовать либо метод discard(), либо метод remove().

Разница между этими методами заключается в том, что метод discard() не будет ничего вызывать, если удаляемого элемента нет в множестве, тогда как метод remove() будет вызывать ошибку, если удаляемый элемент не найден.

>>> s = {2, 4, 5, 6, 7, 8, 9}
>>> print(s)
{2, 4, 5, 6, 7, 8, 9}

>>> s.discard(6)
>>> print(s)
{2, 4, 5, 7, 8, 9}

>>> s.remove(8)
>>> print(s)
{2, 4, 5, 7, 9}

>>> s.discard(6)		#no error
>>> s.remove(8)			#generated an error
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    s.remove(8)
KeyError: 8

Вы также можете использовать pop() для удаления элемента из множества. pop() удаляет и возвращает один произвольный элемент множества.

>>> s = set("Python")
>>> s
{'o', 'n', 'h', 'P', 'y', 't'}
>>> s.pop()
o
>>> s.pop()
n
>>> s
{'h', 'P', 'y', 't'}
>>> s.clear()
>>> print(s)
set()

Вы можете использовать метод set clear() для очистки всех элементов множества.

>>> s = set("Python")
>>> s.clear()
>>> s
set()

Операции с набором Python

Вы можете выполнять такие операции, как union, intersection, difference, и symmetric_difference.

Предположим, что у Вас есть два набора x и y:

>>> x = {1, 2, 3, 4, 5, 6}
>>> y = {7, 8, 9, 10, 11, 12}

Союз

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

Для выполнения операции объединения можно использовать оператор | или метод union().

>>> print(x | y)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}

#using union() method on x
>>> x.union(y)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
#union on y
>>> y.union(x)
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}

Пересечение множества Python

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

Для выполнения операции пересечения можно использовать оператор & или метод intersection().

>>> x = {1, 2, 3, 4, 5, 6}
>>> y = {7, 8, 9, 2, 6, 1}
>>> print(x & y)
{1, 2, 6}

#using intersection() method on x
>>> x.intersection(y)
{1, 2, 6}
#intersection on y
>>> y.intersection(x)
{1, 2, 6}

Различие наборов Python

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

Например, x - y - это элементы x не в y. Аналогично, y - x - это элементы y не в x.

Для выполнения различия можно использовать либо оператор -, либо метод дифференс().

>>> x = {1, 2, 3, 4, 5, 6}
>>> y = {7, 8, 9, 2, 6, 1}
>>> print(x - y)
{3, 4, 5}

#using difference() method on x
>>> x.difference(y)
{3, 4, 5}
#diference on y
>>> y.difference(x)
{8, 9, 7}

Python Sets Symmetric difference

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

Для выполнения симметричного различия можно использовать оператор ^ или метод symmetric_difference().

>>> x = {1, 2, 3, 4, 5, 6}
>>> y = {7, 8, 9, 2, 6, 1}
>>> print(x ^ y)
{3, 4, 5, 7, 8, 9}

#using symmetric_difference() method on x
>>> x.symmetric_difference(y)
{3, 4, 5, 7, 8, 9}
#symmetric_diference on y
>>> y.symmetric_difference(x)
{3, 4, 5, 7, 8, 9}

Методы Pythonых множеств

Ниже приведен список методов, которые могут применяться на множествах на Python:

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

Другие операции по установке Python

Установить проверку членства

Ключевое слово in проверяет, является ли элемент членом набора или нет.

>>> s = set("Blue")
>>> print('o' in s)
False
>>> print('l' in s)
True

Итерация через набор

Вы можете выполнить итерацию через набор, используя цикл for:

for i in set("Blue"):
    print(i)

Result:

B
l
u
e

Встроенные функции набора Python

Ниже приведены некоторые из встроенных функций, которые могут использоваться с наборами для выполнения различных задач:

Функции Описание
all() вернуть True, когда все элементы набора Истина. Также возвращается True, когда набор пуст.
any() вернуть True, когда любой из элементов множества является Истиной. Возвращает False, когда набор пуст.
enumerate() вернуть индекс и значение всех элементов набора в виде кортежа. Возвращает объект внумерация.
len() вернуть количество элементов в комплекте или длину комплекта.
set() определить набор.
max() вернуть максимальное значение в комплекте.
min() вернуть минимальный элемент в комплекте.
sorted() вернуть отсортированный список элементов набора.
sum() вернуть сумму всех элементов комплекта.

Python Фрозенсет

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

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

Наборы замороженных множеств могут быть созданы с помощью метода frozenset().

Ниже приведены некоторые из методов, поддерживаемых frozenset:

  • copy()
  • difference()
  • intersection()
  • isdisdisjoint()
  • issubset()
  • issuperset()
  • symmetric_difference()
  • union()
>>> x = frozenset([2,6,3,9])
>>> y = frozenset([6,1,2,4])
>>> x.difference(y)
frozenset({9, 3})
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn