Глава 8 Кортежі tuple
⏱️ Час на опанування теми: 20 хвилин
🤷 Для чого ми це вивчаємо:
- опанувати структуру даних, в якої неможливо змінити елементи після її створення
- розширити знання зі структур даних
🔑 Результати навчання:
- відрізняти списки
list
від кортежейtuple
- створювати кортежі
tuple
- використовувати корисні функції, оператори та методи, які асоційовані з кортежами
tuple
- “розпаковувати” кортежі
tuple
(та спискиlist
) - розуміти в яких ситуаціях краще використовувати кортежі
tuple
ніж спискиlist
У цій главі ми обговоримо важливу структуру даних, яка має назву кортежі tuple
. Кортежі можна назвати менш універсальною версією списків list
. А чим саме вони відрізняються, ми дізнаємось нижче.
Гарна новина у тому, що кортежі tuple
дуже і дуже схожі 👯 в роботі на списки list
. Та що там, вони практично ідентичні та поводяться майже як списки list
. Тому майже все що ми вивчили для list
можна використати й для кортежей tuple
.
Проте є одна дуже важлива критична ❗️ відмінність – тоді як списки list
можна змінити, кортежі tuple
є незмінними 🇬🇧 immutable . Після того як ми створили tuple
, ми вже не можемо ані додати, ані видалити, ані змінити його елементи.
Щоб створити новий кортеж, ми можемо використати звичайні дужки замість квадратних, які ми використовуємо для list
. Тобто елементи повинні бути загорнуті в ось такі дужки: (
та )
.
Давайте створимо новий tuple
із назвою baltic_countries
, який буде містити назви Балтійських країн 🌊:
= ("Estonia", "Latvia", "Lithuania")
baltic_countries baltic_countries
## ('Estonia', 'Latvia', 'Lithuania')
Це не єдиний спосіб створити tuple
– нам не обов’язково зазначати дужки, ми можемо просто перелічити прості елементи через кому ,
:
= "Estonia", "Latvia", "Lithuania"
baltic_countries baltic_countries
## ('Estonia', 'Latvia', 'Lithuania')
Питання: як ми можемо дізнатись до якої структури даних належить об’єкт 🤔? Все просто, ви можете використати функцію type()
, яку ми також згадували у Главі 6:
type(baltic_countries)
## <class 'tuple'>
У кортежей tuple
, як ми й сказали, доступ до елементів виконується через індекси, так само як і у list
:
2] baltic_countries[
## 'Lithuania'
Ми також можемо використовувати зрізи 🍕:
0:2] baltic_countries[
## ('Estonia', 'Latvia')
Але якщо ви спробуєте замінити який елемент, то Python викине помилку 😬:
2] = "Vilnius" baltic_countries[
## 'tuple' object does not support item assignment
Як наслідок, багато методів які змінювали list
, не будуть працювати з tuple
:
.append()
: додати елемент.insert()
: додати елемент.remove()
: видалити елемент(и).pop()
: видалити елемент.reverse()
: змінити порядок елементів на зворотній.sort()
: відсортувати елементи
До речі, у tuple
, як і у list
є дуже корисна властивість – їх можна розпакувати. Це означає присвоїти значення елементів послідовності до окремих змінних. Це простіше показати, ніж розказувати про це:
= baltic_countries
a, b, c print(a)
## Estonia
print(b)
## Latvia
print(c)
## Lithuania
Тепер ми можемо працювати зі змінними a
, b
та c
, як з окремими змінними. Нам це знадобиться у Главі 14.
Логічно спитати – а навіщо нам взагалі тоді tuple
, якщо вони більше обмежені ніж list
🤷? Є три причини чому ми можемо віддати перевагу tuple
:
tuple
використовують менше пам’яті 🧠 ніжlist
. Операції над ними також проходять швидше 💨 за операції надlist
. В нашому випадку це дуже важко помітити, тому що об’єми даних і програми наші дуже малі. Але якщо ми це все масштабуємо, то в певний момент ця різниця може бути критичною.tuple
незмінні, і це дозволяє нам створювати об’єкти, які будуть захищені 🪖 від випадкових змін.tuple
незмінні, тому їх можна використовувати як ключі 🇬🇧 keys 🔑 для словниківdict
.
Так, стоп, а що таке словники dict
? Саме про це ми й поговоримо в наступній главі.
Ще одна навичка у твою скарбничку 💰 вмінь з Python програмування. Ми познайомились з кортежами tuple
, навчились їх створювати та розгортати. Але головне, ми повторили багато корисних, спільних зі списками list
, штук. Більш того, ми тепер знаємо в яких випадках краще використовувати кортежі tuple
ніж списки list
.
🤸 Вправи
tuple
можна змінювати:country_codes = ["+372", "+371", "+370"]
type(country_codes)
tuple
?tuple
?tuple
?