Кортеж в Python схожий на список. Різниця між ними полягає в тому, що ми не можемо змінити елементи кортежу після присвоювання їм значень, тоді як елементи списку ми можемо змінити.
Створення кортежу в Python
Кортеж створюється шляхом розміщення всіх елементів у круглих дужках (), розділених комами. Круглі дужки необов’язкові, проте їх використання є хорошою практикою. Кортеж може містити будь-яку кількість елементів, і вони можуть бути різних типів (int, float, list, string тощо). Наприклад:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Різні типи кортежів # Порожній кортеж my_tuple = () print(my_tuple) # Кортеж, що містить цілі числа my_tuple = (1, 2, 3) print(my_tuple) # Кортеж зі змішаними типами даних my_tuple = (1, "Hello", 3.4) print(my_tuple) # Вкладений кортеж my_tuple = ("mouse", [8, 4, 6], (1, 2, 3)) print(my_tuple) |
Результат:
()
(1, 2, 3)
(1, 'Hello', 3.4)
('mouse', [8, 4, 6], (1, 2, 3))
Також ми можемо створювати кортежі без використання круглих дужок:
|
1 2 |
my_tuple = 1, 2, 3 my_tuple = 1, "Hello", 3.4 |
Створення кортежу з одним елементом
В Python при створенні кортежу з одним елементом потрібно вказувати кому в кінці, щоб вказати, що це саме кортеж (а не рядок):
|
1 2 |
var1 = ("Hello") # це рядок var2 = ("Hello",) # а це кортеж |
Ми можемо використовувати функцію type(), щоб дізнатися, до якого класу належить змінна чи значення:
|
1 2 3 4 5 6 7 8 9 10 |
var1 = ("hello") print(type(var1)) # Створення кортежу, що містить один елемент var2 = ("hello",) print(type(var2)) # Круглі дужки необов'язкові var3 = "hello", print(type(var3)) |
Результат:
<class 'str'>
<class 'tuple'>
<class 'tuple'>
Тут:
("hello") — це рядок, тому функція type() повертає <class 'str'>;
("hello",) та "hello", — обидва кортежі, тому функція type() повертає <class 'tuple'>.
Доступ до елементів кортежу в Python
Подібно до списку, кожен елемент кортежу представлений індексними номерами (0, 1, …), де індекс першого елемента 0. Номер індексу використовується для доступу до елементів кортежу. Наприклад:
1. Індексація
Ми можемо використовувати оператор індексу [] для доступу до елемента в кортежі, у якого індекс починається з 0.
Таким чином, кортеж, що складається з 6 елементів, матиме індекси від 0 до 5. Спроба отримати доступ до індексу за межами діапазону індексів кортежу (наприклад, до індексів 6 або 7) викличе помилку IndexError.
Індекс має бути цілим числом, тому ми не можемо використовувати тип float чи інші типи. Це призведе до помилки TypeError.
Аналогічно доступ до вкладених кортежів здійснюється з використанням вкладеної індексації, як показано в наступному прикладі:
|
1 2 3 4 5 |
# Доступ до елементів кортежу з використанням індексації letters = ("p", "r", "o", "g", "r", "a", "m", "i", "z") print(letters[0]) # виведе "p" print(letters[5]) # виведе "a" |
Тут:
letters[0] — звертається до першого елементу;
letters[5] — звертається до шостого елементу.
2. Від’ємна індексація
Python дозволяє і від’ємну індексацію своїх послідовностей. Індекс -1 відноситься до останнього елемента, індекс -2 відноситься до передостаннього елемента і так далі. Наприклад:
|
1 2 3 4 5 |
# Доступ до елементів кортежу з використанням від'ємної індексації letters = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z') print(letters[-1]) # виведе 'z' print(letters[-3]) # виведе 'm' |
Тут:
letters[-1] — звертається до останнього елементу;
letters[-3] — звертається до третього з кінця елемента.
3. Зріз
Ми можемо отримати доступ до діапазону елементів у кортежі, використовуючи оператор зрізу :.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Доступ до елементів кортежу за допомогою зрізу my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z') # Виводимо "зрізані" елементи з 2 по 4 індекс print(my_tuple[2:4]) # Виводимо елементи до 2-го індексу – від'ємна індексація print(my_tuple[:-7]) # Виводимо елементи з 7-го індексу до останнього print(my_tuple[7:]) # Виводимо всі елементи кортежу print(my_tuple[:]) |
Результат:
('o', 'g')
('p', 'r')
('i', 'z')
('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
Примітка: При виконанні зрізу в кортежах перший індекс є включаючим, а кінцевий — виключаючим.
Методи для роботи з кортежами в Python
У Python методи, які додають або видаляють елементи, не працюють з кортежами. Працюють лише наступні два методи:
|
1 2 3 4 |
my_tuple = ('a', 'p', 'p', 'l', 'e',) print(my_tuple.count('p')) # виведе 2 print(my_tuple.index('l')) # виведе 3 |
Тут:
my_tuple.count('p') — рахує загальну кількість 'p' у кортежі my_tuple;
my_tuple.index('l') — повертає індекс першого входження 'l' у кортежі my_tuple.
Ітерація кортежу в Python
Ми можемо використовувати цикл for для перебору елементів кортежу. Наприклад:
|
1 2 3 4 5 |
languages = ('Python', 'Swift', 'C++') # Перебираємо та виводимо елементи кортежу for language in languages: print(language) |
Результат:
Перевірка, чи існує елемент у кортежі
Ключове слово in використовується для перевірки того, чи існує елемент у кортежі, чи ні. Наприклад:
|
1 2 3 4 |
languages = ('Python', 'Swift', 'C++') print('C' in languages) # виведе False print('Python' in languages) # виведе True |
Тут:
'C' — відсутній у кортежі languages, тому результатом є False.
'Python' — присутній у кортежі languages, тому результатом є True.
Переваги використання кортежу замість списку в Python
Оскільки кортежі дуже схожі на списки, вони використовуються в схожих ситуаціях. Проте існують певні переваги використання кортежу порівняно зі списком.
Зазвичай кортежі використовуються для різних типів даних, а списки — для елементів схожих типів даних.
Оскільки кортежі незмінні, ітерація кортежу виконується швидше, ніж списку. Таким чином, відбувається невелике підвищення продуктивності.
Кортежі, що містять незмінні елементи, можуть використовуватися як ключ для словника. Зі списками це неможливо.
Якщо у вас є дані, які не змінюються, реалізація їх у вигляді кортежу гарантує, що вони залишаться незмінними.

Цікавий екскурс. Дякую, що опублікували цю статтю.