Кортежи

Кортежи (tuple)

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

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

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

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().