Кортеж

Кортеж - это неизменяемый список. Кортеж после своего создания не может быть изменён никаким способом.

Зачем нужны кортежи?
  • В случае защиты каких-либо данных от изменений (намеренных или случайных).
  • Кортеж занимает меньше места в памяти и работают быстрее, по сравнению со списками.
  • Для возврата нескольких значений из функции.
  • Кортежи можно использовать в качестве ключей словаря (об этом позже).



Создание кортежей

1 способ: как и список, только с круглыми скобками
1
2
3
a = (1,2,3,4,5)
print(type(a))   # class 'tuple'
print(a)         # (1, 2, 3, 4, 5)

2 способ: с использованием функции tuple()
1
2
3
b = tuple((1,2,3,4,5))
print(type(b))   # <class 'tuple'>
print(b)         # (1, 2, 3, 4, 5)


Надо запомнить!
  1. Кортежи - это неизменяемый список.
  2. Элементы кортежа могут быть разного типа.
  3. Создать кортеж можно с помощью функции tuple() или перечислением элементов в круглых скобках.

Особенности кортежей

1) Можно присваивать значения кортежу без использования круглых скобок/
Например, можно создать кортеж и так:
1
2
3
a = 1,2,3,4,5    
print(a[3])    # 4   Обратиться к элементу кортежа можно точно также как к элементу списка, 
               # по указанию индекса элемента в квадратных скобках.

2) Для объявления кортежа, включающего один единственный элемент, нужно использовать завершающую запятую:
1
2
3
4
a = 'a'   
b = 'b', 
print(type(b))   # <class 'tuple'> 
print(type(a))   # <class 'str'>

3) Можно присваивать значения элементов кортежа отдельным переменным:
1
2
3
my_tuple = (1, 2, 3, 4, 5)
a, b, c, d, e = my_tuple
print(c)    # 3

В качестве ненужных переменных можно использоваться нижнее подчеркивание _
1
2
3
my_tuple = (1, 2, 3)
a, _, _ = my_tuple
print(a)    # 1
Количество переменных должно совпадать с числом элементов кортежа!

4) Кортеж может содержать различные вложенные элементы. В данном случае при обращении ко вложенным  элементам необходимо использовать дополнительные квадратные скобки
1
2
my_tuple = (('a', 'b', 'c'), [1, 2], ((1, 'a'), ('b', 'c')))
print(my_tuple[2][1]) # ('b', 'c')

Обращение к элементам. Вложенные кортежи
Кортежи могут содержать в качестве элементов другие кортежи. Также в качестве элементов кортежа могут быть списки, строки и др.
Обращение к элементам аналогично обращению к элементам списка, указывая в квадратных скобках индекс элемента. Индексация начинается с нуля.
При обращении ко вложенным элементам необходимо использовать дополнительные квадратные скобки.
 
my_tuple = (('a', 'b', 'c'), [1, 2], ((1, 'a'), ('b', 'c')))
print(my_tuple[2][1])    # ('b', 'c')

Сравнение кортежей

При сравнении кортежей: 
- числа сравниваются по значению; 
- строки в лексикографическом порядке; 
- при равенстве элементов на одинаковых позициях, сравниваются следующие элементы; 
- сравнение элементов будет происходить до первого неравенства; 
- элементы при сравнении должны быть приводимы к одному типу (нельзя сравнить число и строку). 

 
Пример
1
2
3
4
5
6
7
8
9
10
11
12

A = 4,
B = 8,
C = 'a',
D = 'z',
E = (14, 'maximum', 'minimum')
F = (14, 'maximum', 'min')
K = 999,
print(A < B)    # True
print(C < D)    # True
print(E > F)    # True
print(K < F)    # False
print(C < K)    # TypeError: '<' not supported 
                # between instances of 'str' and 'int'

Срезы

Аналогично спискам можно выполнять срезы.
Следует помнить, что, взяв элемент по индексу или срезом (slice), мы никак не меняем кортеж, мы просто скопировали его часть для дальнейшего использования (например, для вывода на печать, каких-то вычислений и т.п.).

 
Синтаксис среза
my_tuple[start:stop:step]  # старт, стоп и шаг

Конкатенация кортежей

Можно объединить кортежи для создания нового объекта (конкатенация, аналогично строкам).
1
2
3
4
x = (1,2,3,4)
y = (5,6,7,8)
z = x + y 
print(z)  # (1, 2, 3, 4, 5, 6, 7, 8)

При операции умножения кортеж повторяется несколько раз (аналогично умножению строк).
1
2
3
x = (1,2,3,4)
z = x*2
print(z)  # (1, 2, 3, 4, 1, 2, 3, 4)



Удаление кортежа

Операции с кортежами и методы аналогичны операциям и методам работы со списками. За исключением тех, которые меняют элементы кортежа.
Добавить или удалить элемент содержащийся в tuple нельзя по причине неизменяемости. Однако сам кортеж можно удалить с помощью оператора del.
1
2
student = (2007, 'Ivan', 'Ivanov', '9-A', False)
del student

Методы работы с кортежами

Методы работы с кортежами аналогичны методам работы со списками, за исключением методов, которые меняют кортеж. Такие методы недоступны в виду неизменяемости кортежа. Их можно применять, создавая новый кортеж.


Пример сортировки кортежа
Можно легко отсортировать кортеж с использованием функции sorted().
1
2
3
4
a = (5, 3, 2, 1, 4)
print(sorted(a))    # [1, 2, 3, 4, 5] 
a = tuple(sorted(a)) 
print(a)    # (1, 2, 3, 4, 5) 

Обратите внимание, что с кортежами НЕ работают такие методы как append(), extend(), remove() и pop().