Множини Python
Множини (set) представляють ще один вид набору елементів. Для визначення множини використовуються фігурні дужки, в яких перераховуються елементи:
users = {"Tom","Bob","Alice", "Tom"}
print(users) # {"Tom","Bob","Alice"}
Зверніть увагу, що незважаючи на те, що функція print вивела один раз елемент "Tom", хоча у визначенні множини цей елемент міститься два рази. Все тому що множина містить тільки унікальні значення.
Також для визначення множини може застосовуватися функція set(), в яку передається список чи кортеж елементів:
users3 = set(["Mike", "Bill", "Ted"])
Функцію set зручно застосовувати для створення порожньої множини:
users = set()
Для отримання довжини множини застосовується вбудована функція len():
users = {"Tom","Bob","Alice"}
print(len(users)} # 3
Додавання елементів
Для додавання одиночного елемента викликається метод add():
users = set()
users.add("Sam")
print(users)
Видалення елементів
Для видалення одного елемента викликається метод remove(), в який передається елемент, що видаляється. Але слід враховувати, що якщо такого елемента не виявиться в множені, то буде згенерована помилка. Тому перед видаленням слід перевіряти на наявність елемента за допомогою оператора in:
users = {"Tom", "Bob", "Alice"}
user = "Tom"
if user in users:
users.remove(user)
print(users) # {"Bob", "Alice"}
Також для видалення можна використовувати метод discard(), який не буде генерувати винятки при відсутності елемента:
user = "Tim"
users.discard(user)
Для видалення всіх елементів викликається метод clear():
users.clear()
Перебір безлічі
Для перебору елементів можна використовувати цикл for:
users = {"Tom","Bob","Alice"}
for user in users:
print(user)
При переборі кожен елемент поміщається в змінну user.
Операції з множинами
За допомогою методу copy() можна скопіювати вміст однієї множини в іншу змінну:
users = {"Tom","Bob","Alice"}
users3 = users.copy()
Метод union() об'єднує дві множини і повертає нову множину:
users = {"Tom","Bob","Alice"}
users2 = {"Sam","Kate", "Bob"}
users3 = users.union(users2)
print(users3) # {"Bob", "Alice", "Sam", "Kate", "Tom"}
Перетин множин дозволяє отримати тільки ті елементи, які є одночасно є в обох множинах. Метод intersection() виробляє операцію перетину множин і повертає нову множину:
users = {"Tom","Bob","Alice"}
users2 = {"Sam","Kate", "Bob"}
users3 = users.intersection(users2)
print(users3) # {"Bob"}
Замість методу intersection ми могли б використовувати операцію логічного множення:
users = {"Tom","Bob","Alice"}
users2 = {"Sam","Kate", "Bob"}
print(users & users2) # {"Bob"}
У цьому випадку ми отримали б той же результат.
Ще одна операція-різниця множин повертає ті елементи, які є в першій множині, але відсутні в другій. Для отримання різниці множин можна використовувати метод difference або операцію віднімання:
users = {"Tom","Bob","Alice"}
users2 = {"Sam","Kate", "Bob"}
users3 = users.difference(users2)
print(users3) # {"Tom", "Alice"}
print(users - users2) # {"Tom", "Alice"
Відносини між множинами
Метод issubset дозволяє з'ясувати, чи є поточна множина підмножиною (тобто частиною) іншої множини:
users = {"Tom", "Bob", "Alice"}
superusers = {"Sam", "Tom", "Bob", "Alice", "Greg"}
print(users.issubset(superusers)) # True
print(superusers.issubset(users)) # False
Метод issuperset, навпаки, повертає True, якщо поточна множина є надмножиною (тобто містить) для іншої множини:
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:
users = frozenset({"Tom", "Bob", "Alice"})
У функцію frozenset передається набір елементів-список, кортеж, інша множина.
В таку множину ми не можемо додати нові елементи, як і видалити з неї вже наявні. Власне тому frozen set підтримує обмежений набір операцій:
- len(s): повертає довжину множини
- x in s: повертає True, якщо елемент x присутній в множині s
- x not in s: повертає True, якщо елемент x відсутній у множині s
- s.issubset(t): повертає True, якщо t містить множину s
- s.issuperset(t): повертає True, якщо t міститься в множині s
- s.union(t): повертає об'єднання множин s і t
- s.intersection(t): повертає перетин множин s і t
- s.difference(t): повертає різницю множин s і t
- s.copy(): повертає копію множини s