Рубрики
Без рубрики

Наборы Python: подробное визуальное введение

Автор оригинала: Estefania Cassingena Navone.

Добро пожаловать

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

Мы исследуем:

  • Какие наборы и почему они актуальны для ваших проектов.
  • Как создать набор.
  • Как проверить, находится ли элемент набором.
  • Разница между наборами и морозинами.
  • Как работать с наборами (в этой части мы погрузимся в основы теории Set).
  • Как добавить и удалить элементы из наборов и как их очистить.

Давайте начнем! ⭐️.

🔹 Наборы в контексте

Позвольте мне начать с того, почему вы хотите использовать наборы в ваших проектах. В математике набор представляет собой набор различных объектов. В Python, что делает их таким особенным, это тот факт, что У них нет дублирующих элементов Таким образом, их можно использовать для удаления дубликатов элементов из списков и кортежей эффективно.

Согласно Документация Python :

❗️Вспортировать: Элементы набора должны быть неизменными (они не могут быть изменены). Неподвижные типы данных включают строки, кортежи и цифры, такие как целые числа и поплавки.

🔸 синтаксис

Чтобы создать набор, мы начинаем с написания пары вьющихся скобок {} И внутри этих вьющихся скобок мы включаем элементы набора, разделенные запятой и пространством.

💡 Совет: Обратите внимание, что этот синтаксис отличается от словарей Python, потому что мы не создаем пары ключа-значений, мы просто включаем отдельные элементы в фигурных скобках {} Отказ

Набор()

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

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

Это пример в холостом ходу:

# Set
>>> {1, 2, 3, 4}
{1, 2, 3, 4}

# From a list
>>> set([1, 2, 3, 4])
{1, 2, 3, 4}

# From a tuple
>>> set((1, 2, 3, 4))
{1, 2, 3, 4}

💡 Совет: Чтобы создать пустой набор, вы должны использовать Установить () функция, потому что используя пустой набор вьющихся скобок, как этот {} , автоматически создаст пустой Словарь , не пустой набор.

# Creates a dictionary, not a set.
>>> type({})


# This is a set
>>> type(set())

🔹 Дублирующие элементы удаляются

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

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

>>> a = [1, 2, 2, 2, 2, 3, 4, 1, 4]
>>> set(a)
{1, 2, 3, 4}

И обратите внимание, как удаляются дублированные символы, когда мы пройдем эту строку:

>>> a = "hhheeelllooo"
>>> set(a)
{'e', 'l', 'o', 'h'}

🔸 Длина

Чтобы найти длину набора, вы можете использовать встроенный функцию Лен () :

>>> a = {1, 2, 3, 4}
>>> b = set(a)
>>> len(b)
4

В математике количество элементов набора называется « Cardinality » набора.

🔹 Тестирование членства

Вы можете проверить, если элемент находится в комплекте с в Оператор:

Это в примере:

>>> a = "hhheeelllooo"
>>> b = set(a)
>>> b
{'e', 'l', 'o', 'h'}

# Test if the characters 'e' and 'a' are in set b
>>> 'e' in b
True
>>> 'a' in b
False

🔸 Наборы против Frozensets

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

Согласно Документация Python :

Поскольку они не могут содержать значения смежных типов данных, если мы попытаемся создать набор, который содержит наборы в виде элементов (вложенные наборы), мы увидим эту ошибку:

TypeError: unhashable type: 'set'

Это пример в холостом ходу. Обратите внимание, как элементы, которые мы пытаемся включить, наборы:

>>> a = {{1, 2, 3}, {1, 2, 4}}
Traceback (most recent call last):
  File "", line 1, in 
    a = {{1, 2, 3}, {1, 2, 4}}
TypeError: unhashable type: 'set'

FORZENSETS

Чтобы решить эту проблему, у нас есть другой тип набора под названием Frozensets.

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

Согласно Документация Python :

Чтобы создать Frozenset, мы используем:

💡 Совет: Вы можете создать пустой Frozenset с Frozenset () Отказ

Это пример набора, который содержит два морозена:

>>> a = {frozenset([1, 2, 3]), frozenset([1, 2, 4])}
>>> a
{frozenset({1, 2, 3}), frozenset({1, 2, 4})}

Обратите внимание, что мы не получаем ошибок, и набор создан успешно.

🔹 Введение в теорию для установки

Перед погружением в установленные операции нам нужно исследовать немного набор теории и диаграммы Venn. Мы будем нырять в каждую работу с соответствующим эквивалентным в коде Python. Давайте начнем.

Подвеска и надрезы

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

Как будто у вас была сумка, полная резиновых шариков разных цветов. Если вы сделаете набор со всеми резиновыми шариками в пакете, а затем возьмите некоторые из этих резиновых шариков и сделать новый набор с ними, новый набор является подмножеством исходного набора.

Позвольте мне проиллюстрировать это графически. Если у нас есть набор элементов 1, 2, 3, 4:

>>> a = {1, 2, 3, 4}

Мы можем «взять» или «выбирать» некоторые элементы A и сделать новый набор под названием B. Допустим, мы решили включить элементы 1 и 2 в SET B:

>>> a = {1, 2, 3, 4}
>>> b = {1, 2}

Каждый элемент B находится в А. Следовательно, B – это подмножество A.

Это можно представить графически, как это, где новый набор B показан желтым:

💡 Примечание: В теории Set, это конвенция для использования заглавных букв для обозначения наборов. Вот почему я буду использовать их для обозначения наборов (A и B), но я буду использовать строчную букву в Python (A и B).

.issubset ()

Мы можем проверить, B – это подмножество с помощью метода .issubset (<Другое>) :

>>> a = {1, 2, 3, 4}
>>> b = {1, 2}
>>> b.issubset(a)
True

Как видите, B – это подмножество a, потому что возвращаемое значение – Правда Отказ

Но наоборот не соответствует действительности, поскольку не весь элемент A в B:

>>> a.issubset(b)
False

Давайте посмотрим что-то очень интересное:

>>> a = {1, 2, 3, 4}
>>> b = {1, 2, 3, 4}
>>> a.issubset(b)
True
>>> b.issubset(a)
True

Если два набора равны, одно подмножество другого и наоборот, потому что все элементы A в B и все элементы B находятся в A. Это может быть проиллюстрировано следующим образом:

Используя <=

Мы можем достичь одной и той же функциональности .issubset () Метод с <= Оператор сравнения:

>>> a = {1, 2, 3, 4}
>>> b = {1, 2, 3, 4}
>>> a <= b
True

Этот оператор возвращает Правда Если левый операнд представляет собой подмножество правильного операнда, даже когда два набора равны (когда у них есть те же элементы).

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

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

Это будет графический пример правильного подмножества. B не имеет всех элементов A:

Чтобы проверить это, мы можем использовать < Оператор сравнения:

# B is not a proper subset of A because B is equal to A
>>> a = {1, 2, 3, 4}
>>> b = {1, 2, 3, 4}
>>> b < a
False

# B is a proper subset of A because B is not equal to A
>>> a = {1, 2, 3, 4}
>>> b = {1, 2}
>>> b < a
True

Сумасшедший

Если B – это подмножество A, то A – суперс B Отказ SuperSet – это набор, который содержит все элементы подмножества.

Это может быть проиллюстрировано, как это (см. Ниже), где A – суперс B:

.issuperset ()

Мы можем проверить, если набор – суперс другой с .issuperset () Метод:

>>> a = {1, 2, 3, 4}
>>> b = {1, 2}
>>> a.issuperset(b)
True

Мы также можем использовать операторы > и > = Отказ Они работают точно так же, как < и <= , но теперь они определяют, является ли левый операнд суперсета правого операнда:

>>> a = {1, 2, 3, 4}
>>> b = {1, 2}
>>> a > b
True
>>> a >= b
True

Недоступные установки

Два комплекта несерьезны, если у них нет общих элементов. Например, здесь у нас есть два неразмерных набора:

.isdisjoint ()

Мы можем проверить, не проведены ли два набора с .isdisjoint () Метод:

# Elements in common: 3, 1
>>> a = {3, 6, 1}
>>> b = {2, 8, 3, 1}
>>> a.isdisjoint(b)
False

# Elements in common: None
>>> a = {3, 1, 4}
>>> b = {8, 9, 0}
>>> a.isdisjoint(b)
True

🔸 Установить операции

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

Союз

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

Это пример:

>>> a = {3, 1, 7, 4}
>>> b = {2, 8, 3, 1}
>>> a | b
{1, 2, 3, 4, 7, 8}

💡 Совет: Мы можем назначить этот новый набор в переменной, как это:

>>> a = {3, 1, 7, 4}
>>> b = {2, 8, 3, 1}
>>> c = a | b
>>> c
{1, 2, 3, 4, 7, 8}

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

Мы можем легко расширить эту операцию для работы с более чем двумя наборами:

>>> a = {3, 1, 7, 4}
>>> b = {2, 8, 3, 1}
>>> c = {1, 0, 4, 6}
>>> d = {8, 2, 6, 3}

# Union of these four sets
>>> a | b | c | d
{0, 1, 2, 3, 4, 6, 7, 8}

💡 Совет: Если профсоюз содержит повторные элементы, только один входит в финальный набор для устранения повторения.

Пересечение

Пересечение между двумя наборами создает другой набор, который содержит все элементы, которые являются в как а и б Отказ

Это пример:

>>> a = {3, 6, 1}
>>> b = {2, 8, 3, 1}
>>> a & b
{1, 3}

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

Мы можем легко расширить эту операцию для работы с более чем двумя наборами:

>>> a = {3, 1, 7, 4, 5}
>>> b = {2, 8, 3, 1, 5}
>>> c = {1, 0, 4, 6, 5}
>>> d = {8, 2, 6, 3, 5}

# Only 5 is in a, b, c, and d.
>>> a & b & c & d
{5}

Разница

Разница между множеством A и Set B – еще один набор, который содержит все Элементы установки A, которые не в установленном b Отказ

Это пример:

>>> a = {3, 6, 1}
>>> b = {2, 8, 3, 1}
>>> a - b
{6}

Диаграмма Venn для этой разницы была бы такой (см. Ниже), потому что только элементы A, которые не являются в B, включены в результирующий набор:

💡 Совет: Обратите внимание, как мы удаляем элементы A, которые также являются в B (в пересечении).

Мы можем легко расширить это для работы с более чем двумя наборами:

>>> a = {3, 1, 7, 4, 5}
>>> b = {2, 8, 3, 1, 5}
>>> c = {1, 0, 4, 6, 5}

# Only 7 is in A but not in B and not in C
>>> a - b - c
{7}

Симметричная разница

Симметричная разница между двумя множествами A и B является еще одним набором, который содержит Все элементы, которые находятся либо в или B, но не оба Отказ Мы в основном удаляем элементы из пересечения.

>>> a = {3, 6, 1}
>>> b = {2, 8, 3, 1}
>>> a ^ b
{2, 6, 8}

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

Мы можем легко расширить это для работы с более чем двумя наборами:

>>> a = {3, 1, 7, 4, 5}
>>> b = {2, 8, 3, 1, 5}
>>> c = {1, 0, 4, 6, 5}
>>> d = {8, 2, 6, 3, 5}

>>> a ^ b ^ c ^ d
{0, 1, 3, 7}

Обновление устанавливает автоматически

Если вы хотите обновить Установить a сразу после выполнения этих операций, вы можете просто добавить равный знак после оператора. Например:

>>> a = {1, 2, 3, 4}
>>> b = {1, 2}

# Notice the &= 
>>> a &= b
>>> a
{1, 2}

Мы присваиваем заданный результат от A & B установить А в одной линии. Вы можете сделать то же самое с другими операторами: ^ = , | = и - = Отказ

💡 Совет: Это очень похоже на синтаксис, который мы используем с переменными (например: A ) Но теперь мы работаем с наборами.

🔹 Установить методы

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

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

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

>>> a = {1, 2, 3, 4}
>>> a.add(7)
>>> a
{1, 2, 3, 4, 7}

Удалить элементы

Есть три способа удалить элемент из набора: .remove () , .Discard () и .pop () Отказ У них есть ключевые различия, которые мы исследуем.

Первые два метода (.Remove () и .discard ()) работают точно так же, когда элемент находится в наборе. Новый набор возвращен:

>>> a = {1, 2, 3, 4}
>>> a.remove(3)
>>> a
{1, 2, 4}

>>> a = {1, 2, 3, 4}
>>> a.discard(3)
>>> a
{1, 2, 4}

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

>>> a = {1, 2, 3, 4}
>>> a.remove(5)
Traceback (most recent call last):
  File "", line 1, in 
    a.remove(5)
KeyError: 5

У нас никогда не будет этой проблемы с .discard () Поскольку он не вызывает исключение, если элемент не найден. Этот метод будет просто оставить набор Intact, как вы можете увидеть в этом примере:

>>> a = {1, 2, 3, 4}
>>> a.discard(5)
>>> a
{1, 2, 3, 4}

Третий метод ( .pop () ) удалит и вернет произвольный элемент из набора, и он поднимет KeyError Если набор пуст.

>>> a = {1, 2, 3, 4}
>>> a.pop()
1
>>> a.pop()
2
>>> a.pop()
3
>>> a
{4}
>>> a.pop()
4
>>> a
set()
>>> a.pop()
Traceback (most recent call last):
  File "", line 1, in 
    a.pop()
KeyError: 'pop from an empty set'

Очистить набор

Вы можете использовать . Ярком () Метод Если вам нужно удалить все элементы из набора. Например:

>>> a = {1, 2, 3, 4}
>>> a.clear()
>>> a
set()
>>> len(a)
0

🔸 в резюме

  • Наборы неупорядоченные встроенные типы данных, которые не имеют никаких повторяющихся элементов, поэтому они позволяют нам устранить повторные элементы из списков и кортежей.
  • Они смены, и они могут содержать только неизменные элементы.
  • Мы можем проверить, является ли набор подмножественным или сверхугольником другого набора.
  • FrozenseSet – неизменный тип набора, который позволяет нам создавать вложенные множества.
  • Мы можем работать на наборах с: Union ( | ), пересечение ( & ), разница ( - ), и симметричная разница ( ^ ).
  • Мы можем добавить элементы на набор, удалять их и очистить комплект полностью с помощью встроенных методов.

Я действительно надеюсь, тебе понравилась моя статья и обнаружила, что это полезно. Теперь вы можете работать с наборами в ваших проектах Python. Проверьте мои онлайн-курсы Отказ Следуй за мной на Twitter Отказ ⭐️.