Кортежи

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

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

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

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

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

Элементы кортежа могут быть разного типа!

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

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

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

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

4) Кортеж может содержать различные вложенные элементы. В данном случае при обращении ко вложенным  элементам необходимо использовать дополнительные квадратные скобки
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')

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

Проанализируйте пример:
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]  # старт, стоп и шаг

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

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

При операции умножения кортеж повторяется несколько раз (аналогично умножению строк)

x = (1,2,3,4)
z = x*2
print(z)  # (1, 2, 3, 4, 1, 2, 3, 4)
 

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

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

Методы работы с кортежами аналогичны методам работы со списками, за исключением методов, которые меняют кортеж. Такие методы недоступны в виду неизменяемости кортежа. Их можно применять, создавая новый кортеж.
Пример сортировки кортежа
Можно легко отсортировать кортеж с использованием функции sorted()
Проанализируйте работу программы:
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().