Глава 10 Множини set
⏱️ Час на опанування теми: 25 хвилин
🤷 Для чого ми це вивчаємо:
- опанувати структуру даних створену для неупорядкованих елементів
- завершити вивчення структур даних
🔑 Результати навчання:
- створювати множини
set
- перевіряти чи містяться елементи у множині
- додавати та видаляти елементи
- отримувати об’єднання, перетин та різницю двох множин
Множина set
– це неупорядкована 🇬🇧 unordered сукупність унікальних об’єктів. Якщо простіше – це як list
, але без індексів та тільки з унікальними елементами. Ми також можемо представити собі множини set
як словники dict
, в яких є тільки ключі 🔑 без значень. Давайте трохи зануримось у тему множин.
10.1 🧳 Створюємо множини
Пам’ятаєте як створити список list
? Тоді ви вже майже знаєте як створити множини. Замість квадратних дужок ([
та ]
) використайте фігурні ({
та }
), і це створить множину. Давайте створимо множину інгредієнтів гамбургера з МакДональдз. Це "bun"
(булочка 🥯), "mustard"
(гірчиця 🟡), "ketchup"
(кетчуп 🔴), "onion"
(цибуля 🧅), "pickle"
(маринований огірок 🥒) та "beef"
(яловичина 🥩):
= {"bun", "mustard", "ketchup", "onion", "pickle", "beef"}
hamburger hamburger
## {'ketchup', 'onion', 'bun', 'beef', 'pickle', 'mustard'}
До речі якби ми два рази зазначили "beef"
, то словник все одно залишився б таким же. Тому що в словниках можуть бути тільки унікальні елементи, тобто без повторень. Давайте спробуємо:
= {"bun", "mustard", "ketchup", "onion", "pickle", "beef", "beef"}
hamburger hamburger
## {'ketchup', 'onion', 'bun', 'beef', 'pickle', 'mustard'}
До речі, як і ключі 🔑 в словниках dict
, елементами множин set
можуть бути тільки незмінні об’єкти, такі як int
, float
, str
, bool
, tuple
тощо.
Давайте ще створимо множину, яка міститиме інгредієнти МакЧікен 🍗. Нам ця множина знадобиться трохи згодом. Назвемо цей об’єкт macchicken
:
= {"bun", "sauce", "salad", "chicken"}
macchicken macchicken
## {'sauce', 'salad', 'chicken', 'bun'}
10.2 ➕ Застосовуємо оператори
Оператори дуже важливі для множин set
і вони є, так би мовити, основною їх фішкою. Ми почнемо вже з відомого оператора in
, а потім перейдемо до математичних операторів.
10.2.1 Перевіряємо наявність об’єкта серед елементів множини
Як і в трьох попередніх типах, множини set
мають оператори in
та not in
, які дозволяють перевірити чи входить елемент в множину. Давайте перевіримо, чи є "cheese"
(сир 🧀) серед інгредієнтів гамбургера:
"cheese" in hamburger
## False
Звичайнісінько ж ні (False
)! Тоді б це був вже чизбургер 🍔.10
10.2.2 Об’єднуємо множини
Об'єднанням 🇬🇧 union двох множин є множина, елементами якої є елементи з обох множин. Об’єднання здійснюється за допомогою оператора |
.
У нашому прикладі з бургерами, це будуть усі інгредієнти які містяться в гамбургері та усі інгредієнти які містяться в МакЧікені:
| macchicken hamburger
## {'ketchup', 'chicken', 'bun', 'beef', 'onion', 'sauce', 'pickle', 'salad', 'mustard'}
10.2.3 Знаходимо перетин множин
Перетин 🇬🇧 intersection двох множин – це ті елементи, які присутні в обох множинах. У Python він реалізований за допомогою оператора &
.
Це ті інгредієнти, які містяться і в гамбургері і в МакЧікені (тобто тільки булочка):
& macchicken hamburger
## {'bun'}
10.2.4 Знаходимо різницю між множинами
Різницею 🇬🇧 difference називаються ті елементи, які входять до множини першого операнду, але не входять до множини другого операнда:
Різниця між hamburger
та macchicken
, це інгредієнти які є в гамбургері, але яких нема у МакЧікен:
- macchicken hamburger
## {'ketchup', 'beef', 'onion', 'pickle', 'mustard'}
10.3 🪛 Застосовуємо корисні методи
Традиційно, ми почнемо з того як додавати та видаляти елементи з множини set
.
10.3.1 Додаємо елементи до множини
Для того, щоб додати елемент до множини, ми можемо використати метод .add()
. Новий елемент треба буде зазначити між дужками. Додаємо "cheese"
до множини hamburger
:
"cheese")
hamburger.add( hamburger
## {'ketchup', 'onion', 'bun', 'beef', 'pickle', 'cheese', 'mustard'}
10.3.2 Видаляємо елементи із множини
Так, сир не повинен бути у множині hamburger
. Ми можемо його видалити двома методами: .remove()
чи .pop()
. Різниця у тому, що .pop()
ще й поверне значення видаленого елементу, після того, як його видалить. Ми ж скористаємось .remove()
:
"cheese")
hamburger.remove( hamburger
## {'ketchup', 'onion', 'bun', 'beef', 'pickle', 'mustard'}
Якщо такого елемента не існує, то методи повернуть помилку:
"cheese") hamburger.remove(
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'cheese'
10.3.3 Методи, які еквівалентні операторам
Математичні оператори які ми розглянули, тобто об’єднання |
, перетин &
та різниця -
, також реалізовані як методи. Замість того щоб написати a | b
, ми можемо записати цей вираз як a.union(b)
. Цей вираз не змінить a
, а поверне нову множину, яка дорівнюватиме a | b
. Використовуючи множини hamburger
та macchicken
, маємо:
hamburger.union(macchicken)
## {'ketchup', 'chicken', 'bun', 'beef', 'onion', 'sauce', 'pickle', 'salad', 'mustard'}
Нижче ми покажемо таблицю відповідності методів до операторів:
Оператор | Метод |
---|---|
a | b |
a.union(b) |
a & b |
a.intersection(b) |
a - b |
a.difference(b) |
Йой, ти взагалі розумієш, що зараз сталося? Ми не просто навчились тільки що створювати множини set
та працювати з їх елементами. Ні! Опанувавши множини set
, ми звершили величезний блок зі структур даних 😎 Це велика перемога 👏, і тепер головне не зупинятись!
🤸 Вправи
A
та B
:B
A
&
12
до множини grades
:list
tuple
dict
set
set
:## {'Dnipro', 'Kharkiv', 'Kyiv', 'Lviv', 'Odesa'}
'Lviv' in uacities
перевірить, чи є Львів серед українських міст:До речі, автор цієї книги є запеклим шанувальником саме чизбургерів 🍔. Він пам’ятає часи коли він навчався в школі, і чизбургери 🍔 в МакДональдз коштували 2.50 ₴.↩︎