Множества
Последнее обновление: 21.06.2017
Множество (set) представляют еще один вид набора элементов. Для определения множества используются фигурные скобки, в которых перечисляются элементы:
1
2 |
users = {"Tom","Bob","Alice", "Tom"}
print(users) # {"Tom","Bob","Alice"} |
Обратите внимание, что несмотря на то, что функция print вывела один раз элемент "Tom", хотя в определении множества этот элемент содержится два раза. Все потому что множество содержит только уникальные значения.
Также для определения множества может применяться функция set(), в которую передается список или кортеж элементов:
1 |
users3 = set(["Mike", "Bill", "Ted"]) |
Функцию set удобно применять для создания пустого множества:
Для получения длины множества применяется встроенная функция len():
1
2 |
users = {"Tom","Bob","Alice"}
print(len(users)} # 3 |
Добавление элементов
Для добавления одиночного элемента вызывается метод add():
1
2
3 |
users = set()
users.add("Sam")
print(users) |
Удаление элементов
Для удаления одного элемента вызывается метод remove(), в который передается удаляемый элемент. Но следует учитывать, что если такого элемента не окажется в множестве, то будет сгенерирована ошибка. Поэтому перед удалением следует проверять на наличие элемента с помощью оператора in:
1
2
3
4
5
6 |
users = {"Tom", "Bob", "Alice"}
user = "Tom"
if user in users:
users.remove(user)
print(users) # {"Bob", "Alice"} |
Также для удаления можно использовать метод discard(), который не будет генерировать исключения при отсутствии элемента:
1
2 |
user = "Tim"
users.discard(user) |
Для удаления всех элементов вызывается метод clear():
Перебор множества
Для перебора элементов можно использовать цикл for:
1
2
3
4 |
users = {"Tom","Bob","Alice"}
for user in users:
print(user) |
При переборе каждый элемент помещается в переменную user.
Операции с множествами
С помощью метода copy() можно скопировать содержимое одного множества в другую переменную:
1
2 |
users = {"Tom","Bob","Alice"}
users3 = users.copy() |
Метод union() объединяет два множества и возвращает новое множество:
1
2
3
4
5 |
users = {"Tom","Bob","Alice"}
users2 = {"Sam","Kate", "Bob"}
users3 = users.union(users2)
print(users3) # {"Bob", "Alice", "Sam", "Kate", "Tom"} |
Пересечение множеств позволяет получить только те элементы, которые есть одновременно в обоих множествах. Метод intersection() производит операцию пересечения множеств и возвращает новое множество:
1
2
3
4
5 |
users = {"Tom","Bob","Alice"}
users2 = {"Sam","Kate", "Bob"}
users3 = users.intersection(users2)
print(users3) # {"Bob"} |
Вместо метода intersection мы могли бы использовать операцию логического умножения:
1
2
3
4 |
users = {"Tom","Bob","Alice"}
users2 = {"Sam","Kate", "Bob"}
print(users & users2) # {"Bob"} |
В этом случае мы получили бы тот же результат.
Еще одна операция - разность множеств возвращает те элементы, которые есть в первом множестве, но отсутствуют во втором. Для получения разности множеств можно использовать метод difference или операцию вычитания:
1
2
3
4
5
6 |
users = {"Tom","Bob","Alice"}
users2 = {"Sam","Kate", "Bob"}
users3 = users.difference(users2)
print(users3) # {"Tom", "Alice"}
print(users - users2) # {"Tom", "Alice"} |
Отношения между множествами
Метод issubset позволяет выяснить, является ли текущее множество подмножеством (то есть частью) другого множества:
1
2
3
4
5 |
users = {"Tom", "Bob", "Alice"}
superusers = {"Sam", "Tom", "Bob", "Alice", "Greg"}
print(users.issubset(superusers)) # True
print(superusers.issubset(users)) # False |
Метод issuperset, наоборот, возвращает True, если текущее множество является надмножеством (то есть содержит) для другого множества:
1
2
3
4
5 |
users = {"Tom", "Bob", "Alice"}
superusers = {"Sam", "Tom", "Bob", "Alice", "Greg"}
print(users.issuperset(superusers)) # False
print(superusers.issuperset(users)) # True |
frozen set
Тип frozen set является видом множеств, которое не может быть изменено. Для его создания используется функцияfrozenset:
1 |
users = frozenset({"Tom", "Bob", "Alice"}) |
В функцию frozenset передается набор элементов - список, кортеж, другое множество.
В такое множество мы не можем добавить новые элементы, как и удалить из него уже имеющиеся. Собственно поэтому frozen set поддерживает ограниченный набор операций: