Глава 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, який буде містити назви Балтійських країн 🌊:

baltic_countries = ("Estonia", "Latvia", "Lithuania")
baltic_countries
## ('Estonia', 'Latvia', 'Lithuania')

Це не єдиний спосіб створити tuple – нам не обов’язково зазначати дужки, ми можемо просто перелічити прості елементи через кому ,:

baltic_countries = "Estonia", "Latvia", "Lithuania"
baltic_countries
## ('Estonia', 'Latvia', 'Lithuania')

Питання: як ми можемо дізнатись до якої структури даних належить об’єкт 🤔? Все просто, ви можете використати функцію type(), яку ми також згадували у Главі 6:

type(baltic_countries)
## <class 'tuple'>

У кортежей tuple, як ми й сказали, доступ до елементів виконується через індекси, так само як і у list:

baltic_countries[2]
## 'Lithuania'

Ми також можемо використовувати зрізи 🍕:

baltic_countries[0:2]
## ('Estonia', 'Latvia')

Але якщо ви спробуєте замінити який елемент, то Python викине помилку 😬:

baltic_countries[2] = "Vilnius"
## 'tuple' object does not support item assignment

Як наслідок, багато методів які змінювали list, не будуть працювати з tuple:

  • .append(): додати елемент
  • .insert(): додати елемент
  • .remove(): видалити елемент(и)
  • .pop(): видалити елемент
  • .reverse(): змінити порядок елементів на зворотній
  • .sort(): відсортувати елементи

До речі, у tuple, як і у list є дуже корисна властивість – їх можна розпакувати. Це означає присвоїти значення елементів послідовності до окремих змінних. Це простіше показати, ніж розказувати про це:

a, b, c = baltic_countries
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.


🤸 Вправи
1. Кортежі tuple можна змінювати:
2. Що буде роздруковано при виконанні цього коду?
country_codes = ["+372", "+371", "+370"]
type(country_codes)
3. У якому рядку правильно створений кортеж tuple?
4. Оберіть правильне твердження.
5. Чи можемо ми дізнатися до якої структури даних належить tuple?
6. Як отримати доступ до елементів tuple?