Множини 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