Наборы в Python

* Введение * Как создать набор * Доступ к элементам набора * Добавление элементов в набор * Удаление элементов из набора * Set Union * Set Intersection * Set Difference * Set Comparison * Set Methods * Python Frozen Set * Заключение Введение В Python set - это структура данных, в которой хранятся неупорядоченные элементы. Установленные элементы также не проиндексированы. Как и список, набор позволяет добавлять и удалять элементы. Однако есть несколько уникальных характеристик, которые определяют набор и отделяют его от

Вступление

В Python набор - это структура данных, в которой хранятся неупорядоченные элементы. Установленные элементы также не проиндексированы. Как и список, набор позволяет добавлять и удалять элементы. Однако есть несколько уникальных характеристик, которые определяют набор и отделяют его от других структур данных:

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

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

Как создать набор

Есть два способа создания наборов в Python.

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

Вот пример того, как создать набор в Python:

 num_set = {1, 2, 3, 4, 5, 6} 
 print(num_set) 

Выход

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

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

 string_set = {"Nicholas", "Michelle", "John", "Mercy"} 
 print(string_set) 

Выход

 {'Michelle', 'Nicholas', 'John', 'Mercy'} 

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

Также мы можем создать набор с элементами разного типа. Например:

 mixed_set = {2.0, "Nicholas", (1, 2, 3)} 
 print(mixed_set) 

Выход

 {2.0, 'Nicholas', (1, 2, 3)} 

Все элементы вышеперечисленного набора относятся к разным типам.

Мы также можем создать набор из списка. Это можно сделать, вызвав встроенную в Python функцию set() Например:

 num_set = set([1, 2, 3, 4, 5, 6]) 
 print(num_set) 

Выход

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

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

 num_set = set([1, 2, 3, 1, 2]) 
 print(num_set) 

Выход

 {1, 2, 3} 

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

 num_set = {1, 2, 3, 1, 2} 
 print(num_set) 

Выход

 {1, 2, 3} 

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

Создание пустого набора довольно сложно. Если вы используете {} , вы создаете пустой словарь, а не пустой набор. Например:

 x = {} 
 print(type(x)) 

Выход

 <class 'dict'> 

Как показано в выходных данных, тип переменной x является словарем.

Чтобы создать пустой набор в Python, мы должны использовать set() без передачи какого-либо значения для параметров, как показано ниже:

 x = set() 
 print(type(x)) 

Выход

 <class 'set'> 

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

Доступ к элементам набора

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

 months = set(["Jan", "Feb", "March", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"]) 
 
 for m in months: 
 print(m) 

Выход

 March 
 Feb 
 Dec 
 Jan 
 May 
 Nov 
 Oct 
 Apr 
 June 
 Aug 
 Sep 
 July 

Мы также можем проверить наличие элемента в наборе, используя in как показано ниже:

 months = set(["Jan", "Feb", "March", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"]) 
 
 print("May" in months) 

Выход

 True 

Код вернул "True", что означает, что элемент был найден в наборе. Точно так же поиск элемента, которого нет в наборе, возвращает «False», как показано ниже:

 months = set(["Jan", "Feb", "March", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec"]) 
 
 print("Nicholas" in months) 

Выход

 False 

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

Добавление предметов в набор

Python позволяет нам добавлять новые элементы в набор с помощью функции add() . Например:

 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'} 

Товар «Фев» успешно добавлен в набор. Если бы это был набор чисел, мы бы не передавали новый элемент в кавычках, как мы должны были сделать для строки. Например:

 num_set = {1, 2, 3} 
 num_set.add(4) 
 print(num_set) 

Выход

 {1, 2, 3, 4} 

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

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

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

Имейте в виду, что метод discard() не вызовет ошибку, если элемент не найден в наборе. Однако, если используется remove() а элемент не найден, возникает ошибка.

Продемонстрируем, как удалить элемент с помощью метода discard()

 num_set = {1, 2, 3, 4, 5, 6} 
 num_set.discard(3) 
 print(num_set) 

Выход

 {1, 2, 4, 5, 6} 

Элемент 3 удален из набора.

Точно так же метод remove() можно использовать следующим образом:

 num_set = {1, 2, 3, 4, 5, 6} 
 num_set.remove(3) 
 print(num_set) 

Выход

 {1, 2, 4, 5, 6} 

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

 num_set = {1, 2, 3, 4, 5, 6} 
 num_set.discard(7) 
 print(num_set) 

Выход

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

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

 num_set = {1, 2, 3, 4, 5, 6} 
 num_set.remove(7) 
 print(num_set) 

Выход

 Traceback (most recent call last): 
 File "C:\Users\admin\sets.py", line 2, in <module> 
 num_set.remove(7) 
 KeyError: 7 

Выходные данные показывают, что метод вызвал ошибку, когда мы попытались удалить элемент, которого нет в наборе.

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

 num_set = {1, 2, 3, 4, 5, 6} 
 print(num_set.pop()) 

Выход

 1 

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

 num_set = {1, 2, 3, 4, 5, 6} 
 num_set.pop() 
 print(num_set) 

Выход

 {2, 3, 4, 5, 6} 

Это те элементы, которые остались в наборе.

Метод Python clear() помогает нам удалить все элементы из набора. Например:

 num_set = {1, 2, 3, 4, 5, 6} 
 num_set.clear() 
 print(num_set) 

Выход

 set() 

Результатом будет пустой set() без элементов.

Установить союз

Предположим, у нас есть два набора, A и B. Объединение двух наборов - это набор со всеми элементами из обоих наборов. Такая операция выполняется с помощью функции Python union() .

Вот пример:

 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) 

Выход

 {'Oct', 'Jan', 'Nov', 'May', 'Aug', 'Feb', 'Sep', 'March', 'Apr', 'Dec', 'June', 'July'} 

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

 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, 8, 9} 

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

 x = {1, 2, 3} 
 y = {4, 3, 6} 
 z = {7, 4, 9} 
 
 output = x.union(y, z) 
 
 print(output) 

Выход

 {1, 2, 3, 4, 6, 7, 9} 

| Оператор также может использоваться для поиска объединения двух или более множеств. Например:

 months_a = set(["Jan","Feb", "March", "Apr", "May", "June"]) 
 months_b = set(["July", "Aug", "Sep", "Oct", "Nov", "Dec"]) 
 
 print(months_a | months_b) 

Выход

 {'Feb', 'Apr', 'Sep', 'Dec', 'Nov', 'June', 'May', 'Oct', 'Jan', 'July', 'March', 'Aug'} 

Если вы хотите выполнить объединение более чем двух наборов, разделите имена наборов с помощью символа | оператор. Например:

 x = {1, 2, 3} 
 y = {4, 3, 6} 
 z = {7, 4, 9} 
 
 print(x | y | z) 

Выход

 {1, 2, 3, 4, 6, 7, 9} 

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

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

Операция пересечения в наборах может быть достигнута с помощью оператора & или метода intersection() Например:

Например:

 x = {1, 2, 3} 
 y = {4, 3, 6} 
 
 print(x & y) 

Выход

 {3} 

Эти два набора имеют 3 общих элемента. То же самое можно сделать и с помощью метода intersection()

 x = {1, 2, 3} 
 y = {4, 3, 6} 
 
 z = x.intersection(y) 
 print(z) 

Выход

 {3} 

В следующем разделе мы обсудим, как определить разницу между наборами.

Установить разницу

Предположим, у вас есть два набора A и B. Разница между A и B (A - B) - это набор со всеми элементами, которые находятся в A, но не в B. Следовательно, (B - A) - это набор со всеми элементами в B, но не в A.

Чтобы определить различия наборов в Python, мы можем использовать либо функцию difference() либо оператор - Например:

 set_a = {1, 2, 3, 4, 5} 
 set_b = {4, 5, 6, 7, 8} 
 diff_set = set_a.difference(set_b) 
 print(diff_set) 

Выход

 {1, 2, 3} 

в приведенном выше скрипте только первые три элемента набора set_a недоступны в наборе set_b , поэтому они формируют наш вывод. Оператор минус - также можно использовать, чтобы найти разницу между двумя наборами, как показано ниже:

 set_a = {1, 2, 3, 4, 5} 
 set_b = {4, 5, 6, 7, 8} 
 print(set_a - set_b) 

Выход

 {1, 2, 3} 

Симметричная разность наборов A и B - это набор со всеми элементами, которые находятся в A и B, за исключением элементов, общих в обоих наборах. Он определяется с помощью метода Python symmetric_difference() или оператора ^ Например:

 set_a = {1, 2, 3, 4, 5} 
 set_b = {4, 5, 6, 7, 8} 
 symm_diff = set_a.symmetric_difference(set_b) 
 print(symm_diff) 

Выход

 {1, 2, 3, 6, 7, 8} 

Симметричная разница также может быть найдена следующим образом:

 set_a = {1, 2, 3, 4, 5} 
 set_b = {4, 5, 6, 7, 8} 
 print(set_a ^ set_b) 

Выход

 {1, 2, 3, 6, 7, 8} 

Установить сравнение

Мы можем сравнивать наборы в зависимости от элементов, которые в них есть. Таким образом, мы можем сказать, является ли набор надмножеством или подмножеством другого набора. Результатом такого сравнения будет True или False .

Чтобы проверить, является ли набор A подмножеством набора B, мы можем использовать следующую операцию:

 A <= B 

Чтобы проверить, является ли B надмножеством A, мы можем использовать следующую операцию:

 B >= A 

Например:

 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) 

Выход

 True 
 True 

Подмножество и надмножество также можно проверить с помощью issubset() и issuperset() как показано ниже:

 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) 

Выход

 True 
 True 

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

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

Python имеет множество встроенных методов набора, включая следующие:

копия ()

Этот метод возвращает копию рассматриваемого набора. Например:

 string_set = {"Nicholas", "Michelle", "John", "Mercy"} 
 x = string_set.copy() 
 
 print(x) 

Выход

 {'John', 'Michelle', 'Nicholas', 'Mercy'} 

Выходные данные показывают, что x является копией набора string_set .

isdisjoint ()

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

 names_a = {"Nicholas", "Michelle", "John", "Mercy"} 
 names_b = {"Jeff", "Bosco", "Teddy", "Milly"} 
 
 x = names_a.isdisjoint(names_b) 
 print(x) 

Выход

 True 

У этих двух наборов нет общих элементов, поэтому результат будет True .

len ()

Этот метод возвращает длину набора, которая представляет собой общее количество элементов в наборе. Например:

 names_a = {"Nicholas", "Michelle", "John", "Mercy"} 
 
 print(len(names_a)) 

Выход

 4 

Выходные данные показывают, что набор имеет длину 4.

Набор замороженных питонов

Frozenset - это класс с характеристиками набора, но после назначения его элементов их нельзя изменить. Кортежи можно рассматривать как неизменяемые списки, а замороженные наборы - как неизменяемые наборы.

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

Для создания фрозенсетов мы используем метод frozenset() . Давайте создадим два замораживания, X и Y :

 X = frozenset([1, 2, 3, 4, 5, 6]) 
 Y = frozenset([4, 5, 6, 7, 8, 9]) 
 
 print(X) 
 print(Y) 

Выход

 frozenset({1, 2, 3, 4, 5, 6}) 
 frozenset({4, 5, 6, 7, 8, 9}) 

В frozensets поддерживают использование методов набора Python , как copy() , difference() , symmetric_difference() , isdisjoint() , issubset() , intersection() , issuperset() , и union() .

Заключение

В статье представлено подробное введение в наборы в Python. Математическое определение наборов такое же, как определение наборов в Python. Набор - это просто набор неупорядоченных элементов. Сам набор является изменяемым, но элементы набора неизменны. Однако мы можем свободно добавлять и удалять элементы из набора. В большинстве структур данных элементы индексируются. Однако элементы набора не индексируются. Это лишает нас возможности выполнять операции, нацеленные на определенные элементы набора.

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus