Кортеж
Кортеж - это неизменяемый список. Кортеж после своего создания не может быть изменён никаким способом.
Зачем нужны кортежи?
- В случае защиты каких-либо данных от изменений (намеренных или случайных).
- Кортеж занимает меньше места в памяти и работают быстрее, по сравнению со списками.
- Для возврата нескольких значений из функции.
- Кортежи можно использовать в качестве ключей словаря (об этом позже).
Создание кортежей
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)
|
Надо запомнить!
- Кортежи - это неизменяемый список.
- Элементы кортежа могут быть разного типа.
- Создать кортеж можно с помощью функции
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() .
|