В этом руководстве вы узнаете всё о множествах в Python: как их создавать, как добавлять и удалять элементы и т. д.
Множество — неупорядоченный набор элементов. Каждый элемент в множестве уникален (т. е. повторяющихся элементов нет) и неизменяем.
Само по себе множество можно изменять, то есть удалять или добавлять элементы.
Множества удобно использовать для выполнения математических операций: объединение, пересечение, симметрическая разность и т. д.
Как создать множество
Множество объявляется так: элементы помещаются в фигурные скобки {}
и разделяются запятыми. Сделать это можно и с помощью встроенной функции set()
.
Внутри множества может быть любое количество элементов любого типа (целые числа, числа с плавающей точкой, кортежи, строки и т. д.). Внутрь множества нельзя помещать элементы изменяемых типов: списки, другие множества или словари.
# Разные виды множеств
# Множество с целыми числами
my_set = {1, 2, 3}
print(my_set)
# Множество с разными типами данных
my_set = {1.0, "Привет", (1, 2, 3)}
print(my_set)
Вывод:
{1, 2, 3}
{1.0, (1, 2, 3), 'Привет'}
# Внутри множества не может быть одинаковых элементов
# Вывод: {1, 2, 3, 4}
my_set = {1, 2, 3, 4, 3, 2}
print(my_set)
# Аргументом функции set() может быть список
# Вывод: {1, 2, 3}
my_set = set([1, 2, 3, 2])
print(my_set)
# Внутри множества не может быть изменяемых объектов
# В этом множестве [3, 4] — изменяемый список
# Поэтому следующая строка вызовет ошибку
my_set = {1, 2, [3, 4]}
Вывод:
{1, 2, 3, 4}
{1, 2, 3}
Traceback (most recent call last):
File "<string>", line 15, in <module>
my_set = {1, 2, [3, 4]}
TypeError: unhashable type: 'list'
Создание пустого множество — дело хитрое.
Пустые фигурные скобки {}
— это словарь. Чтобы объявить пустое множество, нужно использовать функцию set()
без аргументов.
# Обратим внимание на объявление пустого множества
# Объявление с помощью {}
a = {}
# Проверка типа a
print(type(a))
# Объявление с помощью set()
a = set()
# Проверка типа a
print(type(a))
Вывод:
<class 'dict'>
<class 'set'>
Как изменять множество
Множества изменяемы и не упорядочены. Поэтому в индексации нет никакого смысла.
Так что получить доступ к элементам с помощью индексов или срезов не получится. Множества просто не поддерживают эти операции.
Чтобы добавить один элемент, нужно использовать метод add()
. Если нужно добавить несколько элементов — метод update()
. Метод update()
принимает в качестве аргументов кортежи, списки или другие множества. Во всех случаях следует избегать одинаковых элементов.
# создаем my_set
my_set = {1, 3}
print(my_set)
# вызов my_set[0] приведет к ошибке
# TypeError: 'set' object does not support indexing
# добавляем элемент
# Вывод: {1, 2, 3}
my_set.add(2)
print(my_set)
# добавляем несколько элементов
# Вывод: {1, 2, 3, 4}
my_set.update([2, 3, 4])
print(my_set)
# добавляем список и множество
# Вывод: {1, 2, 3, 4, 5, 6, 8}
my_set.update([4, 5], {1, 6, 8})
print(my_set)
Вывод:
{1, 3}
{1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4, 5, 6, 8}
Как удалять элементы из множества
Определенный элемент множества можно удалить с помощью методов discard()
и remove()
.
Разница между ними вот в чем. Если элемент, который вы хотите удалить с помощью discard()
, отсутствует в множестве — оно не изменится. А вот remove()
вызовет ошибку, если элемента нет в множестве.
# разница между discard() и remove()
# создаем my_set
my_set = {1, 3, 4, 5, 6}
print(my_set)
# удаление элемента
# с помощью discard
# Вывод: {1, 3, 5, 6}
my_set.discard(4)
print(my_set)
# удаление элемента
# с помощью remove
# Вывод: {1, 3, 5}
my_set.remove(6)
print(my_set)
# удаление элемента,
# отсутствующего в my_set,
# с помощью discard
# Вывод: {1, 3, 5}
my_set.discard(2)
print(my_set)
# При удалении элемента,
# отсутствующего в my_set,
# с помощью remove
# вы получите ошибку.
# Вывод: KeyError
my_set.remove(2)
Вывод:
{1, 3, 4, 5, 6}
{1, 3, 5, 6}
{1, 3, 5}
{1, 3, 5}
Traceback (most recent call last):
File "<string>", line 28, in <module>
KeyError: 2
Удалить и вернуть элемент мы можем с помощью метода pop()
.
Так как множество — неупорядоченный тип данных, невозможно определить, какой из элементов будет удален. Это произойдет случайным образом.
Удалить все элементы из множества можно с помощью метода clear()
.
# cоздаем my_set
# Вывод: множество уникальных элементов
my_set = set("Приветмир")
print(my_set)
# pop элемента
# Вывод: случайный элемент
print(my_set.pop())
# pop еще одного элемента
my_set.pop()
print(my_set)
# очищаем my_set
# Вывод: set()
my_set.clear()
print(my_set)
Вывод:
{'П', 'и', 'р', 'т', 'е', 'м', 'в'}
П
{'р', 'т', 'е', 'м', 'в'}
set()
Операции со множествами
Множества можно использовать для выполнения математических операций вроде объединения, пересечения, симметрической разности и т. д. Сделать это можно с помощью операторов и методов.
Рассмотрим два множества и проведем с ними разные операции.
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
Объединение
Результат бъединения A и B — множество, содержащее в себе все элементы множеств A и B.
Операцию объединения можно произвести двумя способами: с помощью оператора |
и метода union()
.
# Операция объединения двух множеств
# Создаем множества A и B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# Используем оператор |
# Вывод: {1, 2, 3, 4, 5, 6, 7, 8}
print(A | B)
Вывод:
{1, 2, 3, 4, 5, 6, 7, 8}
Попробуйте ввести следующие примеры в консоль:
# используем функцию union
>>> A.union(B)
{1, 2, 3, 4, 5, 6, 7, 8}
# используем функцию union с B
>>> B.union(A)
{1, 2, 3, 4, 5, 6, 7, 8}
Пересечение
Результат пересечения A и B — множество, которому принадлежат те и только те элементы, которые одновременно принадлежат всем данным множествам
Операцию объединения можно произвести двумя способами: с помощью оператора &
и метода intersection()
.
# Пересечение множеств
# Создаем множества A и B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# Используем оператор &
# Вывод: {4, 5}
print(A & B)
Вывод:
{4, 5}
Попробуйте ввести следующие примеры в консоль:
# использование метода intersection с A
>>> A.intersection(B)
{4, 5}
# использование метода intersection с B
>>> B.intersection(A)
{4, 5}
Разность
Результат разности множеств B и A — множество элементов, содержащихся только в A. Следовательно,
B-A
= множество элементов, содержащихся только в B.
Операцию объединения можно произвести двумя способами: с помощью оператора -
и метода difference()
.
# Разность двух множеств
# Создаем множества A и B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# Используем оператор - с A
# Вывод: {1, 2, 3}
print(A - B)
Вывод:
{1, 2, 3}
Попробуйте ввести следующие примеры в консоль:
# Использование функции difference с A
>>> A.difference(B)
{1, 2, 3}
# Использование оператора - с B
>>> B - A
{8, 6, 7}
# Использование функции difference с B
>>> B.difference(A)
{8, 6, 7}
Симметрическая разность
Результат симметрической разности множеств A и B — множество элементов, содержащихся и в A, и в B, но не в обоих сразу. Иначе говоря, исключается только пересечение множеств.
Операцию объединения можно произвести двумя способами: с помощью оператора ^
и метода symmetric_difference()
.
# Симметрическая разность множеств A и B
# Создаем множества A и B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# Используем оператор ^
# Вывод: {1, 2, 3, 6, 7, 8}
print(A ^ B)
Вывод:
{1, 2, 3, 6, 7, 8}
Попробуйте ввести следующие примеры в консоль:
# Использование функции symmetric_difference с A
>>> A.symmetric_difference(B)
{1, 2, 3, 6, 7, 8}
# Использование функции symmetric_difference с B
>>> B.symmetric_difference(A)
{1, 2, 3, 6, 7, 8}
Методы множеств
У множеств много методов, некоторые мы уже обсудили выше. Вот полный список методов объекта set
:
Метод |
Описание |
|
Добавляет элемент в множество |
|
Удаляет все элементы из множества |
|
Возвращает копию множества |
|
Возвращает новое множество — разность двух или более множеств |
|
Удаляет все элементы одного набора из другого |
|
Удаляет элемент, если он содержится в множестве (если элемента в множестве нет, то ничего не происходит) |
|
Возвращает новое множество — пересечение двух множеств |
|
Добавляет в множество пересечение с другим множеством или с самим собой |
|
Возвращает |
|
Возвращает |
|
Возвращает |
|
Удаляет и возвращает случайный элемент множества. Если множество пусто, то возвращает ошибку KeyError |
|
Удаляет определенный элемент множества. Если элемент отсутствует в множестве, то возвращает ошибку KeyError |
|
Возвращает новое множество — симметрическую разность двух множеств |
|
Добавляет в множество симметрическую разницу с другим множеством или с самим собой |
|
Возвращает новое множество — объединение множеств |
|
Добавляет в множество объединение с другим множеством или с самим собой |
Несколько операций со множествами
Проверка на вхождение
Мы можем проверить, есть ли элемент в множестве. Сделать это можно с помощью ключевого слова in
.
# Использование ключевого слова in
# Создаем множество my_set
my_set = set("яблоко")
# Проверяем, есть ли 'о' в множестве
# Вывод: True
print('о' in my_set)
# Проверяем, отсутствует ли 'к' в множестве
# Output: False
print('к' not in my_set)
Вывод:
True
False
Итерирование по множеству
Множество можно перебрать с помощью цикла for
.
for letter in set("яблоко"):
print(letter)
Вывод:
я
о
л
к
б
Встроенные функции множеств
Функция |
Описание |
|
Возвращает |
|
Возвращает |
|
Возвращает перечисляемый объект. В нем в виде пар содержатся значения и индексы всех элементов множества |
|
Возвращает длину (количество элементов) множества |
|
Возвращает наибольший элемент множества |
|
Возвращает наименьший элемент множества |
|
Возвращает отсортированный список, в котором находятся элементы множества (само множество не сортируется) |
|
Возвращает сумму всех элементов множества |
Frozenset
Frozenset — класс, имеющий характеристики множества. Отличие состоит в том, что frozenset после объявления неизменяем.
Кортеж — неизменяемый список, frozenset — неизменяемое множество.
Множества изменяемы, поэтому не могут использоваться в качестве ключей словаря. Frozenset же неизменяемы — их можно использовать в качестве ключей словаря.
Этот тип данных поддерживает следующие методы: copy()
, difference()
, intersection()
, isdisjoint()
, issubset()
, issuperset()
, symmetric_difference()
и union()
. Так как он неизменяем, методы add()
и remove()
с ним не работают.
# Frozenset
# Создаем множества A и B
A = frozenset([1, 2, 3, 4])
B = frozenset([3, 4, 5, 6])
Попробуйте ввести следующие примеры в консоль:
>>> A.isdisjoint(B)
False
>>> A.difference(B)
frozenset({1, 2})
>>> A | B
frozenset({1, 2, 3, 4, 5, 6})
>>> A.add(3)
...
AttributeError: 'frozenset' object has no attribute 'add'
```
Множество – это неупорядоченный набор элементов. Каждый элемент уникален (не имеет дубликатов) и должен быть неизменным (его нельзя изменить). Но само множество можно изменять: добавлять или удалять элементы из него.
- set python 3 или как создать множество?
- Как изменять множества в Python
- Как удалить элементы из множества?
- Операции с множествами Python
- Объединение множеств
- Пересечение множеств питон (python)
- Определение разницы множеств
- Симметричная разница множеств
- Методы для работы с множествами в Python
- Другие операции над множествами
- Проверка принадлежности к множеству
- Итерация множества
- Встроенные функции с множествами
- Python Frozenset
Множество создается размещением с помощью функции set(). При этом элементы экранируются фигурными скобками и разделяются запятыми.
Множество может содержать любое количество элементов. Они могут быть различных типов. Но множество не может содержать изменяемый элемент, такой как список или словарь.
# множество целых чисел my_set = {1, 2, 3} print(my_set) # множество значений разных типов my_set = {1.0, "Hello", (1, 2, 3)} print(my_set)
Другие примеры:
# множество не содержит дубликатов # Вывод: {1, 2, 3, 4} my_set = {1,2,3,4,3,2} print(my_set) # множество не может содержать изменяемых значений # здесь [3, 4] - это изменяемый список # Если вы раскомментируете строку #12, # это приведет к ошибке. # TypeError: unhashable type: 'list' #my_set = {1, 2, [3, 4]} # мы можем создать множество из этого списка # Вывод: {1, 2, 3} my_set = set([1,2,3,2]) print(my_set)
Создать пустое множество сложнее. Пустые фигурные скобки {} создадут пустой словарь Python. Чтобы создать множество без элементов, нужно вызвать функцию set() без аргументов.
# инициализируем a с помощью {} a = {} # проверяем тип данных a # Вывод: <class 'dict'> print(type(a)) # инициализируем a с помощью set() a = set() # проверяем тип данных a # Вывод: <class 'set'> print(type(a))
Множества могут быть изменены. Но элементы в них неупорядоченные, поэтому индексирование не имеет смысла.
Нельзя получить доступ или изменить элемент множества, используя для этого индексацию или срез. Множество их не поддерживает.
Можно добавить один элемент, используя метод add(), несколько – используя метод update(). Он может принимать в качестве аргумента кортежи, списки, строки или другие множества. Во всех случаях дубликаты невозможны.
# инициализируем my_set my_set = {1,3} print(my_set) # если вы раскомментируете строку 9, # то получите ошибку # TypeError: 'set' object does not support indexing #my_set[0] # добавление элемента # Вывод: {1, 2, 3} my_set.add(2) print(my_set) # добавление нескольких элементов # Вывод: {1, 2, 3, 4} my_set.update([2,3,4]) print(my_set) # добавление списка и множества # Вывод: {1, 2, 3, 4, 5, 6, 8} my_set.update([4,5], {1,6,8}) print(my_set)
Результат работы программы:
{1, 3} {1, 2, 3} {1, 2, 3, 4} {1, 2, 3, 4, 5, 6, 8}
Это можно сделать с помощью методов discard() и remove(). Различие между ними состоит в том, что при использовании discard(), если элемент не существует во множестве, оно остается неизменным. А метод remove() выдаст ошибку.
Следующий пример иллюстрирует это.
# инициализируем my_set my_set = {1, 3, 4, 5, 6} print(my_set) # удаляем элемент # Вывод: {1, 3, 5, 6} my_set.discard(4) print(my_set) # удаляем элемент # Вывод: {1, 3, 5} my_set.remove(6) print(my_set) # удаляем элемент, # который отсутствует в my_set # Вывод: {1, 3, 5} my_set.discard(2) print(my_set) # удаляем элемент, # который отсутствует в my_set # Если вы раскомментируете строку 27, # то получите ошибку. # Вывод: KeyError: 2 #my_set.remove(2)
Точно так же можно удалить и вернуть элемент, используя метод pop(). Но нет способа определить, какой элемент будет извлечен.
Мы также можем удалить все элементы из множества, используя метод clear().
# инициализируем my_set # Вывод: множество уникальных элементов my_set = set("HelloWorld") print(my_set) # извлекаем элемент # Вывод: случайный элемент print(my_set.pop()) # извлекаем еще один элемент # Вывод: случайный элемент my_set.pop() print(my_set) # очищаем my_set #Вывод: set() my_set.clear() print(my_set)
Множества могут использоваться для выполнения математических операций: объединение, пересечение и симметричная разница.
Рассмотрим следующие два множества:
>>> A = {1, 2, 3, 4, 5} >>> B = {4, 5, 6, 7, 8}
Объединение A и B – это множество всех элементов из обоих множеств.
Объединение осуществляется с помощью оператора |. Эту же операцию можно осуществить с помощью метода union().
# инициализируем A и B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # используем оператор | # Вывод: {1, 2, 3, 4, 5, 6, 7, 8} print(A | B)
Протестируйте следующие примеры:
# используем функцию union >>> A.union(B) {1, 2, 3, 4, 5, 6, 7, 8} # используем функцию union для B >>> B.union(A) {1, 2, 3, 4, 5, 6, 7, 8}
Пересечение A и B – операция получения набора элементов, которые являются общими для обоих множеств.
Пересечение осуществляется с помощью оператора &. Эту же операцию можно произвести с помощью метода intersection().
# инициализируем A и B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # используем оператор & # Вывод: {4, 5} print(A & B)
Протестируйте следующие примеры:
# используем функцию intersection для A >>> A.intersection(B) {4, 5} # используем функцию intersection для B >>> B.intersection(A) {4, 5}
Разница A и B (A – B) – операция получения множества элементов, которые принадлежат только A, но не принадлежат B. Точно так же, B – A представляет собой множество элементов принадлежащих B , но не принадлежащих А.
Разница определяется с помощью оператора -. или метода difference().
# инициализируем A и B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # используем оператор - для A # Вывод: {1, 2, 3} print(A - B)
Протестируйте следующие примеры:
# используем функцию difference для A >>> A.difference(B) {1, 2, 3} # используем оператор - для B >>> B - A {8, 6, 7} # используем функцию difference для B >>> B.difference(A) {8, 6, 7}
Симметричная разница A и B – это множество элементов в A и B, за исключением тех, которые являются общими для обоих множеств. Она определяется с помощью оператора ^ или метода symmetric_difference().
# инициализируем A и B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # используем оператор ^ # Вывод: {1, 2, 3, 6, 7, 8} print(A ^ B)
Протестируйте следующие примеры:
# используем функцию symmetric_difference для A >>> A.symmetric_difference(B) {1, 2, 3, 6, 7, 8} # используем функцию symmetric_difference для B >>> B.symmetric_difference(A) {1, 2, 3, 6, 7, 8}
Список всех методов, которые доступны для работы с объектами множеств.
Методы множеств Python | |
Метод | Описание |
add() | Добавляет элемент во множество. |
clear() | Удаляет все элементы из множества. |
copy() | Возвращает копию множества. |
difference() | Возвращает разницу двух или более множеств в качестве нового множества. |
difference_update() | Удаляет все элементы другого множества из заданного множества. |
discard() | Удаляет элемент из множества, если он содержится в нем. |
intersection() | Возвращает пересечение двух множеств в качестве нового множества. |
intersection_update() | Обновляет множество пересечением с другим множеством. |
isdisjoint() | Возвращает значение True, если два множества имеют нулевое пересечение. |
issubset() | Возвращает значение True, если другое множество содержит это множество. |
issuperset() | Возвращает значение True, если это множество содержит другое множество. |
pop() | Удаляет и возвращает произвольный элемент множество. Выдает KeyError, если множество пусто. |
remove() | Удаляет элемент из набора. Если элемент не является членом множества, выдает KeyError. |
symmetric_difference() | Возвращает симметричную разницу двух множеств как новое множество. |
symmetric_difference_update() | Обновляет множество симметричной разницей между собой и другим множеством. |
union() | Возвращает объединение множеств в новом наборе. |
update() | Обновляет множество объединением с другим множеством. |
Мы можем проверить, существует ли элемент во множестве, используя ключевое слово in.
# инициализируем my_set my_set = set("apple") # проверяем, присутствует ли 'a' # Вывод: True print('a' in my_set) # проверяем, присутствует ли 'p' # Вывод: False print('p' not in my_set)
Используя цикл for, можно выполнить переборку каждого элемента во множестве.
>>> for letter in set("apple"): ... print(letter) ... a p e l
Встроенные функции, такие как all(), any(), enumerate(), len(), max(), min(), sorted(), sum() , используются с множеством для выполнения различных задач.
Встроенные функции для работы с множествами | |
Функция | Описание |
all() | Возвращает значение True, если все элементы множества являются true (или если множество пусто). |
any() | Возвращает значение True, если какой-либо элемент множества является true. Если множество пусто, возвращает значение False. |
enumerate() | Возвращает пронумерованный объект. Содержит индекс и значение всех элементов множества в виде пары. |
len() | Возвращает длину (количество элементов) множества. |
max() | Возвращает наибольший элемент во множестве. |
min() | Возвращает наименьший элемент во множестве. |
sorted() | Возвращает новый отсортированный список, состоящий из элементов множества (не сортирует само множество). |
sum() | Возвращает сумму всех элементов множества. |
Frozenset – это новый класс, который имеет характеристики множества. Но его элементы не могут быть изменены после назначения. В то время как кортежи представляют собой неизменяемые списки, Frozensets являются неизменяемыми множествами.
Frozenset может быть создан с помощью функции frozenset(). Этот тип данных поддерживает такие методы, как copy(), difference(), intersection(), isdisjoint(), issubset(), issuperset(), symmetric_difference() и union(). Но он не поддерживает методы добавления или удаления элементов.
# инициализируем A и B A = frozenset([1, 2, 3, 4]) B = frozenset([3, 4, 5, 6])
Протестируйте эти примеры.
>>> A.isdisjoint(B) False >>> A.difference(B) frozenset({1, 2}) >>> A | B frozenset({1, 2, 3, 4, 5, 6}) >>> A.add(3) ... AttributeError: 'frozenset' object has no attribute 'add'
Тип данных set
в Python поддерживает все операции, которые проводятся над множествами в математике:
- пересечение;
- объединение;
- дополнение;
- разность;
- симметрическую разность.
Множества set
обладают рядом особенностей, которые значительно отличают их от других типов данных.
1. В Python два вида множеств – обычное, изменяемое set
и замороженное, неизменяемое frozenset
. Замороженные множества нельзя изменить после создания, но все операции по объединению, пересечению и разности они поддерживают: результатом этих операций тоже будут frozenset
.
2. Множество может включать в себя только неизменяемые типы данных – строки, числа, кортежи (в любой комбинации). Попытка добавить в множество список, словарь или изменяемое множество приведет к ошибке:
>>> a_set = {[2, 3], [4, 7]}
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
TypeError: unhashable type: 'list'
Неизменяемое множество frozenset
, в отличие от set
, может входить в изменяемое множество:
>>> set_a = {1, 2, 3}
>>> set_b = frozenset({4, 5, 6})
>>> set_c = {7, 8, 9, set_a}
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
TypeError: unhashable type: 'set'
>>> set_c = {7, 8, 9, set_b}
>>> print(set_c)
{8, 9, frozenset({4, 5, 6}), 7}
3. Элементы во множествах хранятся в неупорядоченном виде, и к ним нельзя обратиться по индексу:
>>> set_a = set('123')
>>> print(set_a)
{'3', '2', '1'}
>>> print(set[1])
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
TypeError: 'type' object is not subscriptable
4. Поскольку элементы множества не имеют индексов, срезы при работе с set
тоже использовать нельзя:
>>> set_a = {1, 3, 4, 5, 2, 9, 7}
>>> print(set_a[2:5])
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
TypeError: 'set' object is not subscriptable
5. Все элементы множества – уникальны, повторяющиеся данные в set
игнорируются; это свойство множеств может пригодиться для решения практических задач:
>>> my_set = {2, 2, 2}
>>> print(my_set)
{2}
6. Множества не поддерживают конкатенацию и повторение:
>>> set_a = {1, 3, 5}
>>> set_b = {9, 4, 8}
>>> print(set_a + set_b)
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'set' and 'set'
>>> print(set_a * 2)
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'set' and 'int'
7. Множества занимают значительно больший объем памяти, нежели списки и кортежи. По этой причине лучше не использовать множества для решения задач с лимитом на объем памяти:
>>> from sys import getsizeof
>>> number = 100500
>>> my_list = list(range(number))
>>> my_tuple = tuple(range(number))
>>> my_set = set(range(number))
>>> my_list_size = getsizeof(my_list)
>>> my_tuple_size = getsizeof(my_tuple)
>>> my_set_size = getsizeof(my_set)
>>> print(f'Размер списка: {round(my_list_size / 1024 / 1024, 3)} Мб')
Размер списка: 0.431 Мб
>>> print(f'Размер кортежа: {round(my_tuple_size / 1024 / 1024, 3)} Мб')
Размер кортежа: 0.383 Мб
>>> print(f'Размер множества: {round(my_set_size / 1024 / 1024, 3)} Мб')
Размер множества: 2.0 Мб
8. Хотя множества занимают гораздо больший объем памяти, чем списки и кортежи, работают они гораздо быстрее. Этот код сравнивает время, затраченное на проведение операции над списком, кортежем и множеством с одинаковым количеством элементов:
from time import time
number = 15000
my_set = set(range(number))
my_list = list(range(number))
my_tuple = tuple(range(number))
t = time()
for i in range(number):
if i in my_list:
pass
print(f"Операция со списком: {time() - t} секунд")
my_list.clear()
t = time()
for i in range(number):
if i in my_tuple:
pass
print(f"Операция с кортежeм: {time() - t} секунд")
t = time()
for i in range(number):
if i in my_set:
pass
print(f"Операция со множеством: {time() - t} секунд")
my_set.clear()
Результат:
Операция со списком: 1.810847282409668 секунд
Операция с кортежeм: 1.6490623950958252 секунд
Операция со множеством: 0.0013110637664794922 секунд
Создание множеств в Python
Пустое множество можно создать только одним способом, с помощью set()
:
>>> my_set = set()
>>> print(type(my_set))
<class 'set'>
Попытка создать пустое множество с помощью фигурных скобок {}
обречена на провал – вместо set
будет создан словарь dict
:
>>> my_set = {}
>>> print(type(my_set))
<class 'dict'>
Множество с данными можно создать несколькими способами.
Способ 1: Перечисление элементов
Для создания множества нужные элементы перечисляют через запятую в фигурных скобках:
>>> set_a = {3, 7, 9, 0, 2, 1}
>>> set_b = {'а', 'б', 'в', 'г'}
>>> set_c = {'Мастер и Маргарита', 450, 1250, 'переплет'}
>>> set_d = {2, 4, 5, (2, 9, 0)}
Способ 2: Преобразование других типов данных
Множество можно создать на основе символов либо слов строки:
>>> print(set('абырвалг'))
{'р', 'в', 'л', 'г', 'б', 'а', 'ы'}
>>> print(set('Множества в Python'.split()))
{'Множества', 'в', 'Python'}
Множество из списка:
>>> print(set([3, 6, 4, 5, 5]))
{3, 4, 5, 6}
Множество на основе кортежа:
>>> print(set(('красный', 'синий', 'зеленый')))
{'зеленый', 'красный', 'синий'}
При создании множества из dict
от словаря останутся только ключи:
>>> print(set({'артикул': 'А123', 'цвет': 'черный'}))
{'артикул', 'цвет'}
В отличие от символов строк, число нельзя автоматически разбить на отдельные цифры и преобразовать во множество напрямую:
>>> print(set(123))
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
TypeError: 'int' object is not iterable
Но с применением str
преобразование проходит без ошибок:
>>> print(set(str(1812)))
{'8', '2', '1'}
Способ 3: Генераторы множеств
Как и в случае со списками и словарями, для создания множеств удобно использовать генераторы:
>>> print({i ** 2 for i in range(15)})
{0, 1, 64, 121, 4, 36, 100, 196, 9, 169, 16, 49, 81, 144, 25}
В генераторах можно использовать любые условия:
>>> print({int(i) for i in '3в2о7ыр3р74ртрчфрежр4рфф23468795323' if i.isdigit() and int(i) < 7})
{2, 3, 4, 5, 6}
В генератор можно включить любые дополнительные функции, например, ввод input()
и функцию ord()
для возвращения числового кода символа из таблицы Unicode:
>>> print({ord(i) for i in input() if i.isalpha()})
ewr73694yrhf897349ugg05fhshcvnaWQXXldoaxsd
{81, 87, 88, 97, 99, 100, 101, 102, 103, 104, 108, 110, 111, 114, 115, 117, 118, 119, 120, 121}
Помимо условия if
, в генератор можно добавить обработку else
:
>>> set_a = {i ** 2 if i % 2 == 0 else i ** 3 for i in (map(int, input().split()))}
2 5 12 13 4 56 71 33 9 10
>>> print(set_a)
{3136, 35937, 4, 100, 144, 16, 2197, 357911, 729, 125}
Стандартные методы множеств в Python
Множества поддерживают ряд стандартных методов, общих для большинства коллекций Python, и имеют несколько собственных, уникальных для типа set
. Начнем с общих методов.
Длина, сумма, min и max элементы
Эти методы работают со множествами точно так же, как и со списками и кортежами:
>>> set_a = {2, 4, 5, 6, 1, 9, 7, 12}
>>> print(f'Количество элементов: {len(set_a)}, сумма элементов: {sum(set_a)}')
Количество элементов: 8, сумма элементов: 46
>>> print(f'Минимальный элемент: {min(set_a)}, максимальный элемент: {max(set_a)}')
Минимальный элемент: 1, максимальный элемент: 12
Принадлежность элемента множеству
>>> my_set = {'математика', 'физика', 'химия'}
>>> print('математика' in my_set)
True
>>> print('биология' not in my_set)
True
Сортировка
Как и в случае с кортежами, результатом сортировки множества будет список:
>>> numbers = {25, 15, 7, 8, 19, 34, 52, 0, 12, 59, 91, 4}
>>> print(sorted(numbers))
[0, 4, 7, 8, 12, 15, 19, 25, 34, 52, 59, 91]
>>> print(sorted(numbers, reverse=True))
[91, 59, 52, 34, 25, 19, 15, 12, 8, 7, 4, 0]
Сравнение множеств
Множества можно сравнивать с помощью операторов ==
и !=
:
>>> set_a = {5, 1, 4, 8, 6, 9}
>>> set_b = {6, 2, 5, 9, 7, 10}
>>> print(set_b != set_a)
True
Другие операторы сравнения, например >
и <
, дают неожиданный на первый взгляд результат:
>>> set_a = {1, 2, 3}
>>> set_b = {4, 5, 6, 7}
>>> print(set_b > set_a)
False
Это связано с тем, что при сравнении множеств Python определяет, является ли одно из них под- или надмножеством другого (подробнее об этом – ниже):
>>> set_a = {1, 2, 3}
>>> set_b = {1, 2, 3, 4}
>>> print(set_b > set_a)
True
Добавление элемента
Метод add()
добавляет во множество новый элемент:
>>> letters = {'а', 'б', 'в'}
>>> letters.add('г')
>>> print(letters)
{'г', 'в', 'а', 'б'}
Несколько элементов можно добавить с помощью цикла for
(мы рассмотрим его в следующей статье) или с помощью генератора:
>>> set_a = set()
>>> gen = {set_a.add(i) for i in range(12)}
>>> print(set_a)
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
Удаление элемента
Для удаления элемента нужно воспользоваться одним из поддерживаемых методов:
1. remove()
– возвращает сообщение об ошибке, если элемент не будет найден:
>>> my_set = {1, 2, 3}
>>> my_set.remove(2)
>>> print(my_set)
{1, 3}
2. discard()
– безопасный метод, не приводит к ошибке в случае отсутствия элемента:
>>> my_set = {'красный', 'черный', 'синий'}
>>> my_set.discard('синий')
>>> print(my_set)
{'красный', 'черный'}
>>> my_set.discard('розовый')
>>>
3. pop()
– в отличие от аналогичного списочного метода, удаляет случайный элемент и возвращает его значение:
>>> my_set = {2, 4, 6, 1, 12}
>>> print(my_set.pop())
1
4. Метод clear() удаляет все элементы множества сразу – так можно освободить оперативную память после завершения операции с объемным set
:
>>> my_set = {6, 2, 9, 0}
>>> my_set.clear()
>>> print(my_set)
set()
Специальные методы множеств
Как уже упоминалось выше, объекты set
в Python поддерживают все операции, которые проводятся над множествами в математике. Эти операции делятся на три группы:
- Не изменяющие исходные множества – эти методы возвращают новые множества.
- Изменяющие исходные множества.
- Определяющие, являются ли множества под(над)множествами друг друга – эти методы возвращают
True
илиFalse
.
Рассмотрим методы из этих групп подробнее.
Методы, не изменяющие исходные множества
Объединение множеств
Объединение множеств union ()
– это множество, которое состоит из элементов, входящих в состав хотя бы одного из объединяемых множеств:
>>> set_a = {1, 2, 3}
>>> set_b = {4, 5, 6}
>>> print(set_a.union(set_b))
{1, 2, 3, 4, 5, 6}
Вместо union()
можно использовать оператор |
:
>>> set_a = {'синий', 'розовый', 'черный'}
>>> set_b = {'зеленый', 'красный', 'желтый'}
>>> print(set_a | set_b)
{'синий', 'красный', 'желтый', 'розовый', 'черный', 'зеленый'}
Пересечение множеств
Пересечением множеств intersection()
называется множество, которое состоит из элементов, входящих в каждое из пересекающихся множеств:
>>> set_a = {2, 3, 5, 1, 8}
>>> set_b = {2, 5, 0, 9, 7}
>>> print(set_a.intersection(set_b))
{2, 5}
Вместо intersection()
можно использовать оператор &
:
>>> set_a = {'a', 'b', 'd', 'k'}
>>> set_b = {'v', 'b', 'e', 'k'}
>>> print(set_a & set_b)
{'k', 'b'}
Разность множеств
Разностью множеств difference()
называется множество, в которое входят все элементы первого множества, не входящие во второе множество:
>>> set_a = {4, 9, 7, 2, 1, 0}
>>> set_b = {5, 8, 3, 1, 4, 9}
>>> print(set_a.difference(set_b))
{0, 2, 7}
Вместо difference()
можно использовать оператор -
:
>>> set_a = {'a', 'b', 'g', 'j'}
>>> set_b = {'f', 'b', 's', 'g'}
>>> print(set_a - set_b)
{'a', 'j'}
Симметрическая разность
Симметрической разностью symmetric_difference()
называется множество, состоящее из элементов, которые не входят в первое и второе множество одновременно:
>>> set_a = {1, 2, 3, 4}
>>> set_b = {6, 8, 4, 3}
>>> print(set_a.symmetric_difference(set_b))
{1, 2, 6, 8}
В качестве оператора симметрической разности используется ^
:
>>> set_a = {'h', 'v', 'a', 'w', 'q'}
>>> set_b = {'v', 'h', 'u', 'f', 'o'}
>>> print(set_a ^ set_b)
{'u', 'w', 'f', 'q', 'a', 'o'}
Методы, изменяющие исходные множества
Метод update()
Изменяет исходное множество по объединению:
>>> set_a = {1, 2, 3}
>>> set_b = {4, 5, 6}
>>> set_a.update(set_b)
>>> print(set_a)
{1, 2, 3, 4, 5, 6}
Оператор метода update
– |=
:
>>> set_a = {'a', 'b', 'd'}
>>> set_b = {'c', 'e', 'f'}
>>> set_a |= set_b
>>> print(set_a)
{'b', 'c', 'f', 'a', 'e', 'd'}
Метод intersection_update()
Изменяет исходное множество по пересечению:
>>> set_a = {1, 2, 3}
>>> set_b = {3, 4, 5}
>>> set_a.intersection_update(set_b)
>>> print(set_a)
{3}
Оператор intersection_update()
– &=
:
>>> set_a = {'a', 'b', 'd', 'q'}
>>> set_b = {'h', 'f', 'b', 'a'}
>>> set_a &= set_b
>>> print(set_a)
{'a', 'b'}
Метод difference_update()
Изменяет исходное множество по разности:
>>> set_a = {3, 2, 7, 8, 0}
>>> set_b = {4, 5, 6, 3, 8}
>>> set_a.difference_update(set_b)
>>> print(set_a)
{0, 2, 7}
Оператор difference_update()
– -=
:
>>> set_a = {'v', 's', 'a', 'q', 'r'}
>>> set_b = {'d', 's', 'a', 'f', 'e'}
>>> set_a -= set_b
>>> print(set_a)
{'q', 'r', 'v'}
Метод symmetric_difference_update()
Изменяет исходное множество по симметрической разности:
>>> set_a = {1, 2, 3, 4, 5}
>>> set_b = {8, 2, 4, 6, 1}
>>> set_a.symmetric_difference_update(set_b)
>>> print(set_a)
{3, 5, 6, 8}
Оператор symmetric_difference_update()
– ^=
:
>>> set_a = {'a', 'k', 'r', 'o', 'p'}
>>> set_b = {'d', 'a', '$', 'o', '@'}
>>> set_a ^= set_b
>>> print(set_a)
{'@', 'p', 'd', 'k', 'r', '$'}
Методы для определения под- и надмножеств
Множество set_a считается подмножеством set_b в том случае, если все элементы set_a входят в set_b. В свою очередь, множество set_b этом случае считается надмножеством set_a. При этом любое множество считается подмножеством самого себя, или нестрогим подмножеством.
Для определения под- и надмножеств в Python есть три метода:
1. issuperset()
– возвращает True
, если первое множество является подмножеством второго, и False
в обратном случае. Такой же результат можно получить с помощью операторов <
(строгое подмножество) и <=
(нестрогое подмножество):
>>> set_a = {1, 2, 3}
>>> set_b = {4, 5, 1, 2, 3}
>>> print(set_a.issubset(set_b))
True
>>> print(set_a <= set_b)
True
>>> print(set_a < set_b)
True
2. issubset()
– возвращает True
, если одно множество является надмножеством другого, и False
в противном случае. Аналог – операторы >
(строгое надмножество) и >=
(нестрогое надмножество):
>>> set_a = {'XS', 'S', 'M', 'L', 'XL', 'XXL'}
>>> set_b = {'S', 'M', 'L'}
>>> print(set_a.issuperset(set_b))
True
>>> print(set_a > set_b)
True
>>> print(set_a >= set_b)
True
3. isdisjoint()
– возвращает True
, если множества не имеют общих элементов, и False
, если такие элементы есть:
>>> set_a = {1, 2, 3}
>>> set_b = {4, 5, 6}
>>> set_c = {1, 3, 5}
>>> print(set_a.isdisjoint(set_b))
True
>>> print(set_c.isdisjoint(set_b))
False
Практика
Задание 1
Напишите программу, которая получает на вход три слова и определяет, являются ли они анаграммами друг друга.
Пример ввода:
кластер
стрелка
сталкер
Вывод:
Да
Решение:
set_a, set_b, set_c = set(input()), set(input()), set(input())
print('Да' if set_a == set_b == set_c else 'Нет')
Задание 2
Напишите программу, которая получает на вход две строки с перечислением интересов и хобби двух пользователей, и вычисляет процент совпадения.
Пример ввода:
кино книги велосипед хоккей кулинария цветы кошки
кошки кино путешествия футбол кулинария автомобили дайвинг
Вывод:
Совпадение интересов: 27.27%
Решение:
hobbies1 = input().split()
hobbies2 = input().split()
result = len(set(hobbies1) & set(hobbies2)) / float(len(set(hobbies1) | set(hobbies2))) * 100
print(f'Совпадение интересов: {result:.2f}%')
Задание 3
Напишите программу, которая получает на вход строку, и определяет, является ли строка панграммой (т.е. содержатся ли в ней все 33 буквы русского алфавита).
Пример ввода:
Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства
Вывод:
Да
Решение:
result = {i.lower() for i in input() if i.isalpha()}
print('Да' if len(result) == 33 else 'Нет')
Задание 4
Напишите программу, которая получает n слов, и вычисляет количество уникальных символов во всех словах.
Пример ввода:
5
программа
код
компьютер
монитор
интерпретатор
Вывод:
Количество уникальных символов во всех словах: 14
Решение:
n = int(input())
print('Количество уникальных символов во всех словах:', len(set(''.join([input().lower() for _ in range(n)]))))
Задание 5
Напишите программу, которая:
- Получает на вход две строки, в которых перечисляются книги, прочитанные двумя учениками.
- Выводит количество книг, которые прочитали оба ученика.
Пример ввода:
Мастер и Маргарита, Война и мир, Тихий Дон, Евгений Онегин
Джейн Эйр, Террор, Война и мир, Мастер и Маргарита, Нос
Вывод:
2
Решение:
print(len(set(input().split(', ')) & set(input().split(', '))))
Задание 6
Напишите программу, которая получает от пользователя две строки с числами, и выводит в порядке возрастания числа, встречающиеся в обеих строках.
Пример ввода:
4 12 6 11 0 8 7 5 1 25
2 1 4 5 56 6 8 7 14 33
Вывод:
1 4 5 6 7 8
Задание 7
Напишите программу, которая получает два числа и выводит Есть
, если числа содержат общие цифры, и Нет
в противном случае.
Пример ввода:
5678
3421
Вывод:
Нет
Решение:
print('Есть' if set(input()) & set(input()) else 'Нет')
Задание 8
Напишите программу, которая получает строку с именами файлов, и выводит уникальные имена .jpg файлов, отсортированные в алфавитном порядке.
Пример ввода:
book_cover.jpg cover.png Book_cover.jpg illustration.jpg ILLUSTRATION.JPG my_cover.png photo.gif award.jpg Award.jpg award.JPG
Вывод:
award.jpg book_cover.jpg illustration.jpg
Решение:
files = input().split()
result = {i.lower() for i in files if i.lower().endswith('.jpg')}
print(*sorted(result))
Задание 9
Два дизайнера поспорили о том, кто из них знает больше оттенков цветов. Они перечисляют оттенки, но иногда забывают о том, что уже называли какой-то тон. Напишите программу, которая получает на вход n строк с названиями оттенков, и определяет, есть ли среди них повторы. Если повтор есть, нужно вывести Повтор
, если нет – Принято
.
Пример ввода:
6
аспидно-серый
Бананомания
аквамариновый
Баклажановый
агатовый
антрацитовый
Вывод:
Принято
Решение:
colors = [input().lower() for _ in range(int(input()))]
print('Повтор!' if len(colors) > len(set(colors)) else 'Принято')
Задание 10
Кондитер собирается испечь торт. Напишите программу, которая поможет определить, имеются ли в кладовой все необходимые продукты:
- Сначала программа получает список из m продуктов, которые есть в кладовой.
- Затем получает n ингредиентов, необходимых для рецепта.
- Выводит
Есть
, если ингредиент имеется в кладовой, иОтсутствует
в противном случае.
Пример ввода:
6
5
мука
сахар
Сода
яйца
масло сливочное
масло растительное
Сахар
Мука
Яйца
сливки
масло сливочное
Вывод:
Есть
Есть
Есть
Отсутствует
Есть
Решение:
m, n = [int(input()) for _ in 'mn']
pantry = {input().lower() for _ in range(m)}
[print('Есть' if input().lower() in pantry else 'Отсутствует') for _ in range(n)]
Подведем итоги
Множества позволяют просто и лаконично решать задачи, связанные с уникальностью, вхождением элементов в определенные группы и совпадением (расхождением) в составе групп. Однако множества в Python имеют серьезный недостаток – они занимают значительный объем памяти, что может стать проблемой при решении олимпиадных задач. В следующей статье будем изучать цикл for.
Содержание самоучителя
- Особенности, сферы применения, установка, онлайн IDE
- Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
- Типы данных: преобразование и базовые операции
- Методы работы со строками
- Методы работы со списками и списковыми включениями
- Методы работы со словарями и генераторами словарей
- Методы работы с кортежами
- Методы работы со множествами
- Особенности цикла for
- Условный цикл while
- Функции с позиционными и именованными аргументами
- Анонимные функции
- Рекурсивные функции
- Функции высшего порядка, замыкания и декораторы
- Методы работы с файлами и файловой системой
- Регулярные выражения
- Основы скрапинга и парсинга
- Основы ООП: инкапсуляция и наследование
- Основы ООП – абстракция и полиморфизм
- Графический интерфейс на Tkinter
Множество — это неупорядоченная коллекция уникальных и неизменяемых элементов.
Особенности множества:
- В множестве содержатся только уникальные элементы, никаких дубликатов.
- Элементы множества неизменяемые, но само множество изменяемо.
- Элементы множества — неиндексируемы, а значит, здесь нет срезов.
Создание множества
Создание множества с помощью фигурных скобок
my_set = {1, 2, 3, 4, 5} print(my_set) #{1, 2, 3, 4, 5}
my_set = {'один', 'два', 'три', 'четыре', 'пять'} print(my_set) #{'пять', 'три', 'два', 'четыре', 'один'}
Множество может содержать любое количество элементов разных типов, но только те, которые неизменяемы. Т.е. можно создать множество из строк, чисел, кортежей, но нельзя из списков, словарей и т.п.
my_set = {2, 'три', (4, 5, 6)} print(my_set) #{2, 'три', (4, 5, 6)}
Создание множества с помощью функции set()
Для этого передаем аргументом в функцию set()
итерируемый объект (строку, список или кортеж):
my_str = 'строка' my_set = set(my_str) print(my_set) #{'к', 'о', 'р', 'с', 'а', 'т'}
Как видно из примера, элементы в множестве располагаются в рандомных местах, т.к. множество неиндексируемо.
Если мы возьмем строку в которой будет несколько одинаковых символов, то получим множество, состоящее только из уникальных элементов:
my_str = 'математика' my_set = set(my_str) print(my_set) #{'т', 'м', 'е', 'и', 'а', 'к'}
Создание множества из списка с помощью функции set():
my_list = [1, 2, 3, 4, 5, 2] my_set = set(my_list) print(my_set) #{1, 2, 3, 4, 5}
Если нужно создать пустое множество, то нужно пользоваться функцией set():
my_set = {} my_set_2 = set() print(type(my_set)) print(type(my_set_2)) #<class 'dict'> #<class 'set'>
Доступ к элементам множества через цикл
Так как множество — неиндексируемо, значит получить элемент по индексу нет возможности.
Но мы можем получить доступ к элементам, например через цикл:
my_set = {'один', 'два', 'три', 'четыре', 'пять'} for item in my_set: print(item) #пять #четыре #два #один #три
Проверка наличия элемента в множестве
Есть нужный элемент в множестве или нет можно проверить с помощью in
:
my_set = {'один', 'два', 'три', 'четыре', 'пять'} print('один' in my_set) #True
Если элемента в множестве нет, получаем False
:
my_set = {'один', 'два', 'три', 'четыре', 'пять'} print('шесть' in my_set) #False
Основные методы множества
Добавление элементов в множество: set.add(elem)
my_set = {'один', 'два', 'три', 'четыре', 'пять'} my_set.add('шесть') print(my_set) #{'четыре', 'шесть', 'три', 'один', 'два', 'пять'}
Удаление элемента из множества
Для этого есть несколько методов, рассмотрим каждый из них.
1) Удаление элемента из множества: set.remove(elem)
Если элемент есть в множестве, он будет удален, если его нет, то будет возвращена ошибка «KeyError»:
my_set = {'один', 'два', 'три', 'четыре', 'пять'} my_set.remove('пять') print(my_set) #{'два', 'три', 'четыре', 'один'}
my_set = {'один', 'два', 'три', 'четыре', 'пять'} my_set.remove('шесть') print(my_set) #builtins.KeyError: 'шесть'
2) Удаление элемента из множества: set.discard(elem)
Этот метод удобен когда вам не нужен возврат ошибки, в случае отсутствия элемента в множестве:
my_set = {'один', 'два', 'три', 'четыре', 'пять'} my_set.discard('пять') print(my_set) #{'четыре', 'один', 'три', 'два'}
my_set = {'один', 'два', 'три', 'четыре', 'пять'} my_set.discard('шесть') print(my_set) #{'один', 'пять', 'четыре', 'три', 'два'}
3) Удаление первого элемента из множества: set.pop()
Множества неупорядоченная коллекция, так что нельзя предугадать какой элемент будет удален:
my_set = {'один', 'два', 'три', 'четыре', 'пять'} my_set.pop() print(my_set) #{'один', 'три', 'четыре', 'пять'}
Также метод set.pop()
вместе с удалением возвращает элемент, который был удален:
my_set = {'один', 'два', 'три', 'четыре', 'пять'} print(my_set.pop()) print(my_set) #один #{'четыре', 'три', 'два', 'пять'}
Удалить все элементы множества: set.clear()
my_set = {'один', 'два', 'три', 'четыре', 'пять'} my_set.clear() print(my_set) #set()
Копировать множество: set.copy()
my_set = {'один', 'два', 'три', 'четыре', 'пять'} x = my_set.copy() print(x) #{'два', 'четыре', 'один', 'три', 'пять'}
Операции над множествами
Объединение множеств
При объединении множеств a и b — получим новое множество, которое содержит все элементы множеств a и b.
Объединение с помощью оператора |
:
a = {1, 2, 3} b = {4, 5, 6} print(a | b) #{1, 2, 3, 4, 5, 6}
Объединение с помощью метода set.union()
:
a = {1, 2, 3} b = {4, 5, 6} print(a.union(b)) #{1, 2, 3, 4, 5, 6}
Пересечение множеств
При пересечении множеств a и b — получим новое множество, в котором будут элементы, которые принадлежат обоим множествам.
Пересечение с помощью оператора &
:
a = {1, 2, 3, 4, 5} b = {4, 5, 6, 7, 8} print(a & b) #{4, 5}
Пересечение с помощью метода set.intersection()
:
a = {1, 2, 3, 4, 5} b = {4, 5, 6, 7, 8} print(a.intersection(b)) #{4, 5}
Разность множеств
При разности множеств a и b — получим новое множество, элементы которого содержатся только в множестве a.
raznost.png
Разность с помощью оператора -
:
a = {1, 2, 3, 4, 5} b = {4, 5, 6, 7, 8} print(a - b) #{1, 2, 3}
Разность с помощью метода set.difference()
:
a = {1, 2, 3, 4, 5} b = {4, 5, 6, 7, 8} print(a.difference(b)) #{1, 2, 3}
Симметрическая разность множеств
При симметрической разности множеств a и b — получим новое множество, элементов, которые есть и в a и b, но не в обоих сразу.
Симметрическая разность с помощью оператора ^
:
a = {1, 2, 3, 4, 5} b = {4, 5, 6, 7, 8} print(a ^ b) #{1, 2, 3, 6, 7, 8}
Симметрическая разность с помощью метода set.symmetric_difference()
:
a = {1, 2, 3, 4, 5} b = {4, 5, 6, 7, 8} print(a.symmetric_difference(b)) #{1, 2, 3, 6, 7, 8}
Не пересекающиеся множества
Определяем являются ли множества не пересекающимися, т.е. они оба не содержат общих элементов.
Проверка выполняется методом set.isdisjoint()
:
a = {1, 2, 3, 4, 5} b = {4, 5, 6, 7, 8} print(a.isdisjoint(b)) #False
a = {1, 2, 3, 4, 5} b = {6, 7, 8} print(a.isdisjoint(b)) #True
Основные функции множеств
Длина множества: len(set)
my_set = {1, 2, 3} print(len(my_set)) #3
Максимальный элемент в множестве: max(set)
my_set = {1, 2, 3} print(max(my_set)) #3
Минимальный элемент в множестве: min(set)
my_set = {1, 2, 3} print(min(my_set)) #1
Сумма элементов множества: sum(set)
my_set = {1, 2, 3} print(sum(my_set)) #6
Отсортированный список из элементов множества: sorted(set)
my_set = {1, 4, 2, 3} print(sorted(my_set)) #[1, 2, 3, 4]
Frozenset
Грубо говоря, это те же множества, но с одним нюансом, в них нельзя добавлять новые элементы. Т.е. Frozenset — неизменяемый тип данных.
my_set = {1, 2, 3} my_fset = frozenset(my_set) print(type(my_fset)) my_fset.add(4) #builtins.AttributeError: 'frozenset' object has no attribute 'add'
Небольшой лайфхак
Простой способ удалить не уникальные (повторяющиеся) элементы.
Превратить список в множество (т.к. в множестве только уникальные элементы) и потом обратно с конвертировать в список:
my_list = [1, 2, 3, 1, 2, 3] my_set = set(my_list) my_list = list(my_set) print(my_list) print(type(my_list)) #[1, 2, 3] #<class 'list'>
It is a function in python that returns the sum of all the elements in the set. It doesn’t modifies the given set. It returns a integer type value.
Syntax:
sum(set)
Also Read: Python Set – min() Function
Example 1:
# Python code to understand sum() Function in set # www.codewindow.in s1 = {2, 5, 8, 7, 9} s = {10, 5, 1} print(sum(s1)) print(sum(s))
Output:
Explanation:
Here, the sum of all the elements in set s1 is 31 and the sum of all the elements in set s is 16.
Example 2:
# Python code to understand sum() Function in set # www.codewindow.in s1 = {7, 100} s = {7, 8, 9} print(sum(s1)) print(sum(s))
Output:
Explanation:
Here, the sum of all the elements in set s1 is 107 and the sum of all the elements in set s is 24.
Follow Us
You Missed
- MongoDB – codewindow.inMay 19, 2023
- MongoDB – codewindow.inMay 17, 2023
- MongoDB – codewindow.inMay 17, 2023
- MongoDB – codewindow.inMay 17, 2023
- Computer Network – codewindow.inMay 16, 2023
- Computer Network – codewindow.inMay 16, 2023
- JQuery – codewindow.inMay 15, 2023
- JQuery – codewindow.inMay 15, 2023
- JQuery – codewindow.inMay 15, 2023
- JQuery – codewindow.inMay 15, 2023
- JQuery – codewindow.inMay 15, 2023
- JQuery – codewindow.inMay 13, 2023
- JQuery – codewindow.inMay 13, 2023
- JQuery – codewindow.inMay 13, 2023
- JQuery – codewindow.inMay 13, 2023
- JQuery – codewindow.inMay 13, 2023
- JQuery – codewindow.inMay 12, 2023
- Big Data – codewindow.inMay 12, 2023
- Big Data – codewindow.inMay 12, 2023
- Computer Network – codewindow.inMay 11, 2023
- Computer Network – codewindow.inMay 11, 2023
- Computer Network – codewindow.inMay 11, 2023
- Computer Network – codewindow.inMay 11, 2023
- Computer Network- codewindow.inMay 11, 2023
- Computer Network – codewindow.inMay 11, 2023
- Computer Network – codewindow.inMay 11, 2023
- Computer Network – codewindow.inMay 11, 2023
- Computer Network – codewindow.inMay 11, 2023
- Computer Network – codewindow.inMay 11, 2023
- MongoDB – codewindow.inMay 11, 2023
- MongoDB – codewindow.inMay 11, 2023
- MongoDB – codewindow.inMay 11, 2023
Also Checkout
- Adobe
- Ajax
- Algorithm
- Amagi
- Amazon Interview Questions
- Angular JS
- Aptitude
- big data
- Books
- Bridge2i
- C programming
- Campgemini Interview Questions
- Capgemini Coding Questions
- Capgemini Pseudocode
- Celebal Tech
- Cloud Computing
- code nation
- CodeVita
- Coding Questions
- Cognizant Placement
- commvault Systems
- Computer Network
- CSS
- CTS
- Data Science
- Data Structure and Algorithm
- De Show Interview Questions
- deloitte
- Deutsche Bank Interview questions
- Epam Full Question Paper
- Exxon Mobil interview questions
- filpkart
- Fractal Analytics Interview Questions
- Genpact
- Grab
- GreyB Interview Questions
- Guidance for Accenture
- Gupshup
- HCL Interview Questions
- Hexaware
- HFCL
- HR Questions
- HTML5
- IBM Interview questions
- IBM Questions
- Incture Interview Questions
- Infineon Technologies Interview Questions
- Infosys
- Infosys Interview Questions
- Internship
- Interview Experience
- Interview Questions
- ITC Infotech
- itron
- JavaScript
- JECA
- Job Info
- JQuery
- Kantar Interview Questions
- Larsen & Turbo
- Latenview AnalyticsInterview questions
- Lexmark International Interview Questions
- Machine Learning
- Media.net
- Mindtree Interview Questions
- Miscellaneous
- MongoDB
- Morgan Stanly Interview Questions
- nagarro
- navi
- NodeJS
- NPCI
- NTT Data Interview Questions
- NVDIA
- NVDIA interview questions
- Optum
- PayU
- Persistent INterview Questions
- Programming in C
- Programming in C++
- Programming in JAVA
- Programming in Python
- Project
- pseudocode
- PWC Interview Questions
- Python
- Quiz
- Razorpay
- ReactJS
- Recruiting Companies
- Revature
- salesforce
- Samsung
- Schlumberger
- Seimens
- Slice
- Smart Cube
- Study Material
- Tally Solutions
- tata cliq
- TCS
- TCS NQT
- TCS NQT Coding Questions
- Tech Mahindra Coding Questions
- Tech Mahindra Questions
- Teg Analytics
- Tejas Network Interview Questions
- Texas Instrument Interview Questions
- Tiger Analytics
- Uncategorized
- UnDosTres
- Unstop
- Verbal Ability
- Web Development
- Wipro Coding Questions
- Wipro interview Questions
- Wipro NLTH
- WIpro NLTH Coding Solve
- Zenser
- Zoho Interview Questions