Як створити кортежі в Python і навіщо їх використовувати?

Кортеж у Python – це вбудований тип даних, який дозволяє зберігати набір елементів. Він має схожість зі списком, але вирізняється трохи вищою швидкістю виконання операцій.

Тим не менш, існують певні обмеження, які роблять списки більш привабливими у деяких випадках. У цій статті ми розглянемо ключові аспекти роботи з кортежами, щоб ви могли ефективно використовувати їх у своїх проєктах.

Що ж таке кортеж?

Як було зазначено, кортеж є одним з фундаментальних типів даних у Python, призначеним для зберігання колекцій даних. Подібно до списків, він організовує дані у структурі, що нагадує масив, який можна ітерувати. Однак, на відміну від списків, кортежі є незмінними. Це означає, що після створення кортежу його вміст не може бути змінений.

Не можна додавати нові елементи або видаляти існуючі. Таким чином, кортежі ідеально підходять для зберігання інформації, яка не потребує змін. Це можуть бути як однотипні, так і різнотипні дані. У наступних розділах ми розглянемо різні підходи до створення кортежів у Python.

Як створити кортеж у Python?

Існує декілька способів створення кортежів у Python. Ми зосередимося на трьох найпоширеніших методах, які ви, ймовірно, будете використовувати та зустрічати під час вивчення коду інших розробників.

Для виконання наведених нижче прикладів коду, вам потрібно встановити Python на своєму комп’ютері. Якщо у вас ще немає Python, скористайтеся відповідними інструкціями для встановлення. Крім того, ви можете виконувати свій код онлайн, використовуючи середовища, такі як Google Colab.

#1. Використання літералу кортежу (круглі дужки)

Найбільш поширений спосіб визначення кортежу у Python – це розміщення набору значень усередині круглих дужок. Ці значення відокремлюються комами. Розглянемо приклад:

# Створення кортежу, розміщуючи значення між дужками
values = (1, 2, 3)

# Виведення кортежу на екран
print(values)

# Виведення типу змінної values
print(type(values))

Виконавши цей код, ви отримаєте наступний результат:

Як видно з виводу, кортеж містить значення, якими ми його ініціалізували. Також, він має тип <class ‘tuple’>.

При створенні кортежів у Python, круглі дужки є необов’язковими. Тому, вираз values = 1, 2, 3 є таким же коректним, як і values = (1, 2, 3). Однак, рекомендується використовувати круглі дужки для кращої читабельності коду.

Створення кортежів з одним елементом у Python має свою особливість. Замість простого розміщення елемента в дужках, потрібно також додати кому в кінці. Ось приклад:

# Без коми в кінці це не створить кортеж
not_a_tuple = (1)

# З комою в кінці це створить кортеж
a_tuple = (1,)

# Виведення not_a_tuple
print(not_a_tuple)

# Виведення типу даних not_a_tuple
print(type(not_a_tuple))

# Виведення a_tuple
print(a_tuple)

# Виведення типу даних a_tuple
print(type(a_tuple))

Після виконання коду ви побачите, що not_a_tuple стає цілим числом (int) зі значенням 1. Це важливий нюанс, який потрібно враховувати при створенні кортежів.

#2. Використання функції-конструктора

Другий спосіб створення кортежів у Python передбачає використання функції-конструктора tuple(). Цей метод викликає функцію, передаючи ітерабельний об’єкт, такий як список, як аргумент. Цей об’єкт буде перетворено в кортеж. Ось приклад:

# Створення кортежу зі списку значень
values = tuple([1, 2, 3])

# Виведення значень
print(values)

# Виведення типу даних ідентифікатора values
print(type(values))

Як бачите, використання функції дає ідентичний результат, як і використання літералу. Однак, функція дозволяє створювати кортежі на основі динамічних значень, наприклад, списку, вміст якого відомий лише під час виконання. У першому методі, ви повинні знати значення або ідентифікатори, що складають ваш кортеж, на етапі написання коду.

#3. Створення порожнього кортежу

Під час роботи з кортежами, вам може знадобитися створити порожні кортежі. Порожні кортежі створюються так, як ви могли б очікувати. Ви можете використати як конструктор кортежу, так і літерал для їх створення. Розглянемо приклад, який ілюструє обидва методи:

# Використання літералу кортежу
empty_tuple_1 = ()

# Використання конструктора
empty_tuple_2 = tuple()

Порожні кортежі корисні при представленні порожнього набору результатів. Розглянемо наступну функцію:

def create_range(start, end):
    return tuple(range(start, end))

Ця функція створює кортеж зі значеннями в заданому діапазоні. Якщо ви хочете ітеруватися по результатах функції, ви можете зробити це наступним чином:

my_values = create_range(0, 5)

for value in my_values:
    pass

Якщо ви передасте однакові значення початку і кінця (наприклад, 5 і 5), функція create_range поверне порожній кортеж. І якщо ви спробуєте ітеруватися по ньому, то цикл не виконається жодного разу, і ваш код буде працювати без помилок.

З іншого боку, якби не було порожніх кортежів, і замість них ви б отримали значення None, то спроба ітеруватися по ньому призвела б до помилки. Щоб запобігти цьому, вам довелося б додавати перевірку, що функція create_range повертає None або інше значення, яке представляє порожній кортеж.

Це зробить код більш складним і менш читабельним. В ідеалі, слід уникати особливих випадків, наскільки це можливо. Це означає, що значення, яке повертає функція, має завжди мати однаковий інтерфейс, щоб ваш код працював у загальному випадку. У цьому випадку це означає постійно повертати кортеж, навіть якщо іноді він буде порожнім.

Як отримати доступ до елементів

У Python є два способи доступу до елементів кортежу. Перший – за індексом, а другий – за допомогою деструктуризації елементів. Розглянемо спочатку, як отримати доступ до елементів за індексом.

Доступ до елементів за індексом

Доступ до елементів за індексом аналогічний доступу до елементів списку. Він здійснюється за допомогою квадратних дужок. Для кортежів використовується система нумерації з нуля, тобто перший елемент має індекс 0, наступний – 1 і так далі до останнього елемента.

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

# Створення кортежу
values = (1, 2, 3, 4)

# Доступ до першого елемента
first_element = values[0]

# Доступ до четвертого елемента (індекс 3)
fourth_element = values[3]

Ви також можете використовувати негативну індексацію. Елемент з індексом -1 є останнім елементом, а елемент з індексом -2 – передостаннім.

# Створення кортежу
values = (1, 2, 3, 4)

# Доступ до останнього елемента
last_element = values[-1]

# Доступ до передостаннього елемента
second_from_last_element = values[-2]

Крім того, ви можете отримати доступ до підмножини елементів кортежу, використовуючи зрізи. Це аналогічно зрізам у списках. Синтаксис має наступний вигляд: <кортеж>[<початок>:<кінець>:<крок>]. Ось приклад зрізів:

# Створення кортежу
values = (1, 2, 3, 4, 5, 6, 7)

# Отримання перших трьох елементів
values[1:3]

# Отримання кожного другого елемента
values[::2]

Ітерація елементів

Кортеж є ітерованим об’єктом у Python. Тому ви можете перебирати його елементи за допомогою циклу for, як показано в прикладі:

values = (1, 2, 3, 4)

for value in values:
    print(value)

Цей метод доступу до елементів є ідеальним, якщо ви хочете звернутися до кожного елемента кортежу.

Доступ до елементів шляхом деструктуризації

Для того, щоб пояснити деструктуризацію, розглянемо наступний сценарій, де ми намагаємося отримати різні елементи з кортежу.

# Створення кортежу для зберігання інформації про користувача
person_record = (1, 'John Doe', '[email protected]')

# Доступ до різних елементів кортежу для використання в коді
id = person_record[1]
name = person_record[2]
email = person_record[3]

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

# Створення кортежу для зберігання інформації про користувача
person_record = (1, 'John Doe', '[email protected]')

id, name, email = person_record

Це і є деструктуризація. Першій змінній, id, буде присвоєно перше значення кортежу, другій змінній – друге значення і так далі до кінця кортежу. Наведений приклад є еквівалентним наступному:

id, name, email = (1, 'John Doe', '[email protected]')

У цьому випадку, замість того, щоб зберігати кортеж у змінній, ми негайно деструктуризуємо його. Якщо об’єднати це знання з тим, що круглі дужки не обов’язкові при створенні кортежів, то ви зможете написати код у такому вигляді.

id, name, email = 1, 'John Doe', '[email protected]'

В кінці, ви будете мати змінні id, name та email зі значеннями 1, “John Doe” та “[email protected]“. Це зручний і лаконічний спосіб створення змінних у Python, який ви часто зустрінете в реальних проєктах. Важливо розуміти, що в основі цього елегантного синтаксису лежить концепція кортежів.

Відмінності між кортежем та списком

Хоча кортежі та списки схожі, існують ключові відмінності, які роблять кожен з них більш придатним для певних сценаріїв. Розуміння цих відмінностей допоможе вам вибирати оптимальний тип даних та писати більш якісний та ефективний код.

Аспект Кортеж Список
Зберігання в пам’яті Зберігається в безперервній області пам’яті Зберігається в різних областях пам’яті
Змінність Незмінний (не можна змінювати) Змінний (можна змінювати)
Швидкість Доступ швидший Доступ повільніший
Тип даних Зазвичай зберігає дані різних типів Зазвичай зберігає дані одного типу
Використання Зазвичай використовується для зберігання колекції подібних значень, наприклад, координат Зазвичай використовується для зберігання колекції подібних значень, таких як оцінки

Переваги кортежу

#1. Швидкість

Через особливості зберігання значень у безперервній області пам’яті, доступ до елементів кортежу відбувається швидше, ніж до елементів списку. Однак, оскільки кортежі не можуть бути змінені після створення, вони не завжди є оптимальною структурою для зберігання колекцій, які потребують модифікації.

Ідеальний випадок використання кортежів – це зберігання великих обсягів даних у пам’яті, які не змінюються, але доступ до яких потрібен багато разів під час виконання програми. У такому сценарії ваша програма отримає значну перевагу завдяки продуктивності кортежів.

#2. Повернення декількох значень

Ви можете використовувати кортежі для повернення декількох значень з функції та деструктуризації результату. Наприклад:

from random import randint

def create_two_numbers():
    first_num = randint(0, 9)
    second_num = randint(0, 9)

    return first_num, second_num

first_num, second_num = create_two_numbers()

У цьому прикладі у нас є функція, яка створює два випадкових числа і повертає їх у вигляді кортежу. Інструкція return first_num, second_num є еквівалентною до return (first_num, second_num), оскільки круглі дужки є необов’язковими при створенні кортежів. Щоб отримати доступ до результату, ми його деструктуризуємо.

#3. Захист від запису

Кортежі є незмінними після створення. Тому вони ідеально підходять для зберігання даних, які не повинні змінюватися під час виконання програми. Вони гарантують, що ви випадково не перезапишете дані в іншій частині вашого коду.

#4. Зберігання різних типів даних

Кортежі дозволяють зберігати значення різних типів даних. Це дозволяє створювати записи даних, наприклад, зберігати дані користувача в кортежі. Ви також можете зберігати складніші елементи, такі як функції, словники, інші кортежі та навіть списки.

Поширені методи кортежу

#1. count()

Об’єкт кортежу має метод count, який повертає кількість входжень заданого елемента. Наприклад:

# Створення кортежу з декількома числами
values = (1, 2, 3, 4, 5, 4, 4, 6)

# Підрахунок кількості четвірок
n_fours = values.count(4)

# Виведення кількості четвірок
print(n_fours)

З цього прикладу видно, що число 4 зустрічається рівно тричі в нашому кортежі.

#2. index()

Метод index можна використовувати для пошуку індексу першого входження заданого значення в кортежі. Якщо значення не існує, то буде створено виняток ValueError. Ось приклад, який ілюструє, як працює метод index:

# Створення кортежу з декількома числами
values = (1, 2, 3, 4, 5, 4, 4, 6)

# Пошук індексу 4
index_of_four = values.index(4)
print("Index of four:", index_of_four)

# Пошук індексу 9
index_of_nine = values.index(9)
print("Index of nine:", index_of_nine)

Після запуску цього коду, ви отримаєте наступний результат:

В даному випадку індекс числа 4 дорівнює 3 і код виконався без помилок. Але при спробі знайти індекс числа 9, програма викликала виняток. Важливо обробляти такі винятки, коли ви пишете програми на Python, які використовують метод index.

#3. len()

Як і всі ітеровані об’єкти в Python, кортежі мають властивість length, до якої можна отримати доступ, передавши кортеж як аргумент функції len().

# Створення кортежу
values = (1, 2, 3, 4)

# Отримання довжини кортежу
length = len(values)

# Виведення результату
print(length)

Ось результат виконання наведеного вище коду.

#4. min() і max()

Методи min і max працюють, перебираючи кожен елемент в ітерації і порівнюючи його з попереднім. В кінці, max поверне найбільший елемент в ітерації, а min – найменший.

З числами ця операція є очевидною. Для рядків Python буде використовувати алфавітний порядок. Найменше слово, яке повертає min, є першим словом в алфавітному порядку. Найбільше слово є останнім словом. Якщо ітерабельний об’єкт містить суміш різних типів даних, то обидві операції завершаться помилкою, оскільки Python не знає, як порівнювати різні типи даних.

Ось приклад коду:

# Створення кортежу зі значеннями
values = (1, 2, 3, 4, 5)

# Отримання найбільшого значення
largest = max(values)

# Отримання найменшого значення
smallest = min(values)

# Виведення результатів
print(largest)
print(smallest)

#5. sorted()

Функція sorted у Python приймає ітерований об’єкт і повертає список відсортованих елементів. Ви можете викликати функцію sorted, передати кортеж як аргумент і отримати елементи кортежу, відсортовані в списку. Щоб перетворити відсортований список на кортеж, можна скористатися функцією-конструктором. Ось приклад:

# Створення кортежу зі значеннями у випадковому порядку
values = (1, 5, 3, 3, 2, 4)

# Використання sorted для сортування значень в список
sorted_list = sorted(values)

# Перетворення списку в кортеж
sorted_tuple = tuple(sorted_list)

# Виведення результату
print(sorted_tuple)

#6. Додавання та множення кортежів

Операція додавання двох кортежів просто об’єднує їх. Операція множення повторює елементи кортежу стільки разів, на скільки ви помножили. Ось приклад, який демонструє обидва варіанти.

# Створення кортежу з певними значеннями
values = (1, 2, 3, 4, 5)

# Створення нового кортежу за допомогою додавання
added = values + values

# Створення нового кортежу за допомогою множення
multiplied = values * 2

print("values + values =", added)
print("values * 2 =", multiplied)

Заключні слова

У цій статті ви дізналися, що:

  • Кортежі – це об’єкти, подібні до списків, які використовуються для зберігання колекцій значень.
  • На відміну від списків, вони є незмінними.
  • Вони швидші та ефективніші, ніж списки.
  • Їх можна створити за допомогою круглих дужок та розділення значень комами.
  • Їх також можна створити за допомогою функції-конструктора tuple().
  • Ви можете отримати доступ до окремих значень, використовуючи систему індексів з нуля.
  • Ви також можете деструктуризувати значення з кортежу.
  • Ви можете ітеруватися по значеннях за допомогою циклу for.
  • Існують різні методи, які можна використовувати з кортежами.

Далі ви можете ознайомитися з додатковим матеріалом про Python, наприклад, методами списків та словників.