Множество в Python - это коллекция неупорядоченных элементов. Каждый элемент множества должен быть уникальным, неизменяемым, и множества не хранят дублирующиеся элементы. Множества являются изменяемыми, что означает, что мы можем изменять их после создания.
В отличие от других коллекций в Python, к элементам множества не привязан индекс, то есть мы не можем напрямую обратиться к любому элементу множества по индексу. Однако мы можем напечатать их все вместе или получить список элементов, перебирая множество.
Создание множества в Python
Множество можно создать, заключив разделенные запятыми неизменяемые элементы в фигурные скобки {}
. Python также предоставляет метод set()
, который можно использовать для создания множества по переданной последовательности.
Пример 1: Использование фигурных скобок
Days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}
print(Days)
print(type(Days))
print("looping through the set elements ... ")
for i in Days:
print(i)
Вывод:
{'Friday', 'Tuesday', 'Monday', 'Saturday', 'Thursday', 'Sunday', 'Wednesday'}
<class 'set'>
looping through the set elements ...
Friday
Tuesday
Monday
Saturday
Thursday
Sunday
Wednesday
Пример 2: Использование метода set()
Days = set(["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"])
print(Days)
print(type(Days))
print("looping through the set elements ... ")
for i in Days:
print(i)
Вывод:
{'Friday', 'Wednesday', 'Thursday', 'Saturday', 'Monday', 'Tuesday', 'Sunday'}
<class 'set'>
looping through the set elements ...
Friday
Wednesday
Thursday
Saturday
Monday
Tuesday
Sunday
Он может содержать элементы любого типа, такие как целое число, число с плавающей точкой, кортеж и т.д. Но изменяемые элементы (список, словарь, множество) не могут быть членами набора. Рассмотрим следующий пример.
# Creating a set which have immutable elements
set1 = {1,2,3, "JavaTpoint", 20.5, 14}
print(type(set1))
#Creating a set which have mutable element
set2 = {1,2,3,["Javatpoint",4]}
print(type(set2))
Вывод:
<class 'set'>
Traceback (most recent call last)
<ipython-input-5-9605bb6fbc68> in <module>
4
5 #Creating a set which holds mutable elements
----> 6 set2 = {1,2,3,["Javatpoint",4]}
7 print(type(set2))
TypeError: unhashable type: 'list'
В приведенном выше коде мы создали два множества, множество set1
содержит неизменяемые элементы, а set2
- один изменяемый элемент в виде списка. При проверке типа set2
возникла ошибка, что означает, что set
может содержать только неизменяемые элементы.
Создание пустого множества немного отличается, потому что пустые фигурные скобки {}
также используются для создания словаря. Поэтому Python предоставляет метод set()
, используемый без аргумента для создания пустого множества.
# Empty curly braces will create dictionary
set3 = {}
print(type(set3))
# Empty set using set() function
set4 = set()
print(type(set4))
Вывод:
<class 'dict'>
<class 'set'>
Давайте посмотрим, что произойдет, если мы предоставим дублирующий элемент в множество.
set5 = {1,2,4,4,5,8,9,9,10}
print("Return set with unique elements:",set5)
Вывод:
Return set with unique elements: {1, 2, 4, 5, 8, 9, 10}
В приведенном выше коде мы видим, что set5
состоял из нескольких дублирующихся элементов, когда мы напечатали его, мы удалили дубликаты из множества.
Добавление элементов в множество
Python предоставляет методы add()
и update()
, которые можно использовать для добавления определенного элемента в набор. Метод add()
используется для добавления одного элемента, а метод update()
- для добавления нескольких элементов в множество. Рассмотрим следующий пример.
Пример: 1 - Использование метода add()
Months = set(["January","February", "March", "April", "May", "June"])
print("\nprinting the original set ... ")
print(months)
print("\nAdding other months to the set...");
Months.add("July");
Months.add ("August");
print("\nPrinting the modified set...");
print(Months)
print("\nlooping through the set elements ... ")
for i in Months:
print(i)
Вывод:
printing the original set ...
{'February', 'May', 'April', 'March', 'June', 'January'}
Adding other months to the set...
Printing the modified set...
{'February', 'July', 'May', 'April', 'March', 'August', 'June', 'January'}
looping through the set elements ...
February
July
May
April
March
August
June
January
Чтобы добавить более одного элемента в набор, Python предоставляет метод update()
. В качестве аргумента он принимает iterable
.
Рассмотрим следующий пример.
Пример - 2 Использование функции update()
Months = set(["January","February", "March", "April", "May", "June"])
print("\nprinting the original set ... ")
print(Months)
print("\nupdating the original set ... ")
Months.update(["July","August","September","October"]);
print("\nprinting the modified set ... ")
print(Months);
Вывод:
printing the original set ...
{'January', 'February', 'April', 'May', 'June', 'March'}
updating the original set ...
printing the modified set ...
{'January', 'February', 'April', 'August', 'October', 'May', 'June', 'July', 'September', 'March'}
Удаление элементов из набора
Python предоставляет метод discard()
и метод remove()
, которые можно использовать для удаления элементов из множества. Разница между этими функциями заключается в том, что при использовании функции discard()
, если элемент не существует в наборе, то множество останется неизменным, в то время как метод remove()
выдаст ошибку.
Рассмотрим следующий пример.
Пример-1 Использование метода discard()
months = set(["January","February", "March", "April", "May", "June"])
print("\nprinting the original set ... ")
print(months)
print("\nRemoving some months from the set...");
months.discard("January");
months.discard("May");
print("\nPrinting the modified set...");
print(months)
print("\nlooping through the set elements ... ")
for i in months:
print(i)
Вывод:
printing the original set ...
{'February', 'January', 'March', 'April', 'June', 'May'}
Removing some months from the set...
Printing the modified set...
{'February', 'March', 'April', 'June'}
looping through the set elements ...
February
March
April
June
Python также предоставляет метод remove()
для удаления элемента из набора. Рассмотрим следующий пример удаления элементов с помощью метода remove()
.
Пример-2 Использование функции remove()
months = set(["January","February", "March", "April", "May", "June"])
print("\nprinting the original set ... ")
print(months)
print("\nRemoving some months from the set...");
months.remove("January");
months.remove("May");
print("\nPrinting the modified set...");
print(months)
Вывод:
printing the original set ...
{'February', 'June', 'April', 'May', 'January', 'March'}
Removing some months from the set...
Printing the modified set...
{'February', 'June', 'April', 'March'}
Мы также можем использовать метод pop()
для удаления элемента. Как правило, метод pop()
всегда удаляет последний элемент, но набор неупорядочен, и мы не можем определить, какой элемент будет удален из множества.
Рассмотрим следующий пример удаления элемента из множества с помощью метода pop()
.
Months = set(["January","February", "March", "April", "May", "June"])
print("\nprinting the original set ... ")
print(Months)
print("\nRemoving some months from the set...");
Months.pop();
Months.pop();
print("\nPrinting the modified set...");
print(Months)
Вывод:
printing the original set ...
{'June', 'January', 'May', 'April', 'February', 'March'}
Removing some months from the set...
Printing the modified set...
{'May', 'April', 'February', 'March'}
В приведенном выше коде последним элементом множества Month
является March
, но метод pop()
удалил June
и January
, потому что набор неупорядочен и метод pop()
не смог определить последний элемент набора.
Python предоставляет метод clear()
для удаления всех элементов из набора.
Рассмотрим следующий пример.
Months = set(["January","February", "March", "April", "May", "June"])
print("\nprinting the original set ... ")
print(Months)
print("\nRemoving all the items from the set...");
Months.clear()
print("\nPrinting the modified set...")
print(Months)
Вывод:
printing the original set ...
{'January', 'May', 'June', 'April', 'March', 'February'}
Removing all the items from the set...
Printing the modified set...
set()
Разница между методами discard() и remove()
Несмотря на то, что метод discard()
и remove()
выполняют одну и ту же задачу, между discard()
и remove()
есть одно основное различие.
Если ключ, который нужно удалить из множества с помощью метода discard()
, не существует в множестве, Python не выдаст ошибку. Программа сохраняет свой поток управления.
С другой стороны, если элемент, который нужно удалить из множества с помощью remove()
, не существует в наборе, Python выдаст ошибку.
Рассмотрим следующий пример.
Months = set(["January","February", "March", "April", "May", "June"])
print("\nprinting the original set ... ")
print(Months)
print("\nRemoving items through discard() method...");
Months.discard("Feb"); #will not give an error although the key feb is not available in the set
print("\nprinting the modified set...")
print(Months)
print("\nRemoving items through remove() method...");
Months.remove("Jan") #will give an error as the key jan is not available in the set.
print("\nPrinting the modified set...")
print(Months)
Вывод:
printing the original set ...
{'March', 'January', 'April', 'June', 'February', 'May'}
Removing items through discard() method...
printing the modified set...
{'March', 'January', 'April', 'June', 'February', 'May'}
Removing items through remove() method...
Traceback (most recent call last):
File "set.py", line 9, in
Months.remove("Jan")
KeyError: 'Jan'
Операции с множествами в Python
С множеством можно выполнять такие математические операции, как объединение, пересечение, разность и симметричная разность. Python предоставляет возможность выполнять эти операции с помощью операторов или методов.
Объединение двух множеств в Python
Объединение двух множеств вычисляется с помощью оператора pipe (|
). Объединение двух множеств содержит все элементы, которые присутствуют в обоих множествах.
Рассмотрим следующий пример для вычисления объединения двух множеств.
Пример 1: использование оператора union |
Days1 = {"Monday","Tuesday","Wednesday","Thursday", "Sunday"}
Days2 = {"Friday","Saturday","Sunday"}
print(Days1|Days2) #printing the union of the sets
Вывод:
{'Friday', 'Sunday', 'Saturday', 'Tuesday', 'Wednesday', 'Monday', 'Thursday'}
Python также предоставляет метод union()
, который также можно использовать для вычисления объединения двух множеств. Рассмотрим следующий пример.
Пример 2: использование метода union()
Days1 = {"Monday","Tuesday","Wednesday","Thursday"}
Days2 = {"Friday","Saturday","Sunday"}
print(Days1.union(Days2)) #printing the union of the sets
Вывод:
{'Friday', 'Monday', 'Tuesday', 'Thursday', 'Wednesday', 'Sunday', 'Saturday'}
Пересечение двух множеств в Python
Пересечение двух множеств может быть выполнено с помощью оператора &
или функции intersection()
. Пересечение двух множеств задается как набор элементов, общих для обоих множеств.
Пример 1: Использование оператора &
Days1 = {"Monday","Tuesday", "Wednesday", "Thursday"}
Days2 = {"Monday","Tuesday","Sunday", "Friday"}
print(Days1&Days2) #prints the intersection of the two sets
Вывод:
{'Monday', 'Tuesday'}
Пример 2: Использование метода intersection()
set1 = {"Devansh","John", "David", "Martin"}
set2 = {"Steve", "Milan", "David", "Martin"}
print(set1.intersection(set2)) #prints the intersection of the two sets
Вывод:
{'Martin', 'David'}
Пример 3
set1 = {1,2,3,4,5,6,7}
set2 = {1,2,20,32,5,9}
set3 = set1.intersection(set2)
print(set3)
Вывод:
{1,2,5}
Метод intersection_update()
Метод intersection_update()
удаляет из исходного множества элементы, которые не присутствуют в обоих множествах (во всех наборах, если задано несколько).
Метод intersection_update()
отличается от метода intersection()
, поскольку он изменяет исходное множество, удаляя ненужные элементы, с другой стороны, метод intersection()
возвращает новое множество.
Рассмотрим следующий пример.
a = {"Devansh", "bob", "castle"}
b = {"castle", "dude", "emyway"}
c = {"fuson", "gaurav", "castle"}
a.intersection_update(b, c)
print(a)
Вывод:
{'castle'}
Нахождение разности двух множеств в Python
Разность двух множеств можно вычислить с помощью оператора вычитания (-
) или метода intersection()
. Допустим, есть два множества A
и B
, а разность равна A-B
, что означает, что в результирующем множестве будет получен тот элемент из A
, которого нет в множестве B
.
Пример 1: Использование оператора вычитания (-
)
Days1 = {"Monday", "Tuesday", "Wednesday", "Thursday"}
Days2 = {"Monday", "Tuesday", "Sunday"}
print(Days1-Days2) #{"Wednesday", "Thursday" will be printed}
Вывод:
{'Thursday', 'Wednesday'}
Пример 2 : Использование метода difference()
Вывод:
{'Thursday', 'Wednesday'}
Симметричная разность двух множеств в Python
Симметричная разность двух множеств вычисляется с помощью оператора ^
или метода symmetric_difference()
. Симметричная разность множеств, удаляет тот элемент, который присутствует в обоих множествах. Рассмотрим следующий пример:
Пример - 1: Использование оператора ^
a = {1,2,3,4,5,6}
b = {1,2,9,8,10}
c = a^b
print(c)
Вывод:
{3, 4, 5, 6, 8, 9, 10}
Пример - 2: Использование метода symmetric_difference()
a = {1,2,3,4,5,6}
b = {1,2,9,8,10}
c = a.symmetric_difference(b)
print(c)
Вывод:
{3, 4, 5, 6, 8, 9, 10}
Сравнение множеств
Python позволяет нам использовать операторы сравнения, т.е. <
, >
, <=
, >=
, ==
с множествами, с помощью которых мы можем проверить, является ли множество подмножеством, супермножеством или эквивалентным другому множеству. В зависимости от элементов, присутствующих внутри множества, возвращается булево значение true
или false
.
Рассмотрим следующий пример.
Days1 = {"Monday", "Tuesday", "Wednesday", "Thursday"}
Days2 = {"Monday", "Tuesday"}
Days3 = {"Monday", "Tuesday", "Friday"}
#Days1 is the superset of Days2 hence it will print true.
print (Days1>Days2)
#prints false since Days1 is not the subset of Days2
print (Days1<Days2)
#prints false since Days2 and Days3 are not equivalent
print (Days2 == Days3)
Вывод:
True
False
False
Замороженные множества (FrozenSets) в Python
Замороженные множества являются неизменяемой формой обычных множеств, то есть элементы замороженного множества не могут быть изменены и поэтому могут быть использованы в качестве ключа в словаре.
Элементы замороженного множества не могут быть изменены после создания. Мы не можем изменять или добавлять содержимое замороженных наборов с помощью таких методов, как add()
или remove()
.
Метод frozenset()
используется для создания объекта frozenset. В этот метод передается итерируемая последовательность, которая преобразуется в замороженный набор в качестве возвращаемого типа метода.
Для создания замороженного набора рассмотрим следующий пример.
Frozenset = frozenset([1,2,3,4,5])
print(type(Frozenset))
print("\nprinting the content of frozen set...")
for i in Frozenset:
print(i);
Frozenset.add(6) #gives an error since we cannot change the content of Frozenset after c
Вывод:
<class 'frozenset'>
printing the content of frozen set...
1
2
3
4
5
Traceback (most recent call last):
File "set.py", line 6, in <module>
Frozenset.add(6) #gives an error since we can change the content of Frozenset after creation
AttributeError: 'frozenset' object has no attribute 'add'
Замороженные множества (FrozenSets) для словаря
Если передать словарь в качестве последовательности в метод frozenset()
, то он возьмет только ключи из словаря и вернет frozenset, который содержит ключи словаря в качестве своих элементов.
Рассмотрим следующий пример.
Dictionary = {"Name":"John", "Country":"USA", "ID":101}
print(type(Dictionary))
Frozenset = frozenset(Dictionary); #Frozenset will contain the keys of the dictionary
print(type(Frozenset))
for i in Frozenset:
print(i)
Вывод:
<class 'dict'>
<class 'frozenset'>
Name
Country
ID
Примеры мрограмм с использование множеств
Пример - 1: Напишите программу для удаления заданного числа из набора.
my_set = {1,2,3,4,5,6,12,24}
n = int(input("Enter the number you want to remove"))
my_set.discard(n)
print("After Removing:",my_set)
Вывод:
Enter the number you want to remove:12
After Removing: {1, 2, 3, 4, 5, 6, 24}
Пример - 2: Напишите программу для добавления нескольких элементов к множеству.
set1 = set([1,2,4,"John","CS"])
set1.update(["Apple","Mango","Grapes"])
print(set1)
Вывод:
{1, 2, 4, 'Apple', 'John', 'CS', 'Mango', 'Grapes'}
Пример - 3: Напишите программу для нахождения объединения двух множеств.
set1 = set(["Peter","Joseph", 65,59,96])
set2 = set(["Peter",1,2,"Joseph"])
set3 = set1.union(set2)
print(set3)
Вывод:
{96, 65, 2, 'Joseph', 1, 'Peter', 59}
Пример - 4: Напишите программу для нахождения пересечения двух множеств.
set1 = {23,44,56,67,90,45,"Javatpoint"}
set2 = {13,23,56,76,"Sachin"}
set3 = set1.intersection(set2)
print(set3)
Вывод:
{56, 23}
Пример - 5: Напишите программу для добавления элемента в морозильную установку.
set1 = {23,44,56,67,90,45,"Javatpoint"}
set2 = {13,23,56,76,"Sachin"}
set3 = set1.intersection(set2)
print(set3)
Вывод:
TypeError: 'frozenset' object does not support item assignment
Вышеприведенный код вызвал ошибку, так как замороженные множества неизменяемы и не могут быть изменены после создания.
Пример - 6: Напишите программу для нахождения issuperset, issubset и superset.
set1 = set(["Peter","James","Camroon","Ricky","Donald"])
set2 = set(["Camroon","Washington","Peter"])
set3 = set(["Peter"])
issubset = set1 >= set2
print(issubset)
issuperset = set1 <= set2
print(issuperset)
issubset = set3 <= set2
print(issubset)
issuperset = set2 >= set3
print(issuperset)
Вывод:
False
False
True
True
Встроенные методы множеств в Python
Python содержит следующие методы для использования с множествами.
Метод | Описание |
---|---|
add(item) |
Добавляет элемент в множество. Не имеет эффекта, если элемент уже присутствует в множестве. |
clear() |
Удаляет все элементы из множества. |
copy() |
Возвращает неглубокую копию множества. |
difference_update(....) |
Изменяет множество, удаляя все элементы, которые также присутствуют в других указанных множествах. |
discard(item) |
Удаляет указанный элемент из множества. |
intersection() |
Возвращает новое множество, содержащее только общие элементы обоих множеств. (всех множеств, если указано более двух). |
intersection_update(....) |
Удаляет элементы из исходного множества, которые не присутствуют в обоих множествах (во всех множествах, если указано несколько). |
isdisjoint(....) |
Возвращает True , если два множества имеют нулевое пересечение. |
issubset(....) |
Сообщает, содержит ли другое множество указанный набор. |
issuperset(....) |
Сообщает, содержит ли указаннное множество другой набор. |
pop() |
Удаляет и возвращает произвольный элемент множества, который является последним элементом множества. Вызывает KeyError , если множество пустое. |
remove(item) |
Удаляет элемент из множества; он должен быть его членом. Если элемент не является членом множества, то возвращает KeyError . |
symmetric_difference(....) |
Возвращется элементы, которые есть в двух множествах (в одном или другом, но не в обоих) |
symmetric_difference_update(....) |
Возвращает новое множество, содержащее симметричную разность двух множеств. |
union(....) |
Возвращает объединение множеств в виде нового множества (т.е. все элементы, которые есть в любом из множеств). |
update() |
Выполняет объединение всех задействованных множеств и обновляет множество, для которого он вызывается. Он добавляет все члены набора аргументов в множеств, для которого он вызывается. |