Кортеж — это похожая на список структура данных. Отличие от списка заключается в том, что кортеж — неизменная структура. Если в него нужно внести изменения — данные копируются в новый кортеж с учетом необходимых изменений.
Кортежи применяются как вспомогательная структура данных. Например, можно создавать список из кортежей или словарь с кортежами в качестве ключей и т.п.
Кортеж может стоять слева от оператора присваивания. Если при этом в выражении справа от него стоит кортеж или список с таким же количеством значений — то произойдет поэлементное присваивание:
(a, b) = (2, 5)
print(a) # 2
print(b) # 5
Эта особенность позволяет возвращать из функции сразу несколько значений и принимать их в несколько переменных.
Для создания кортежей используются функция tuple() или синтаксис с круглыми скобками:
# создание пустого кортежа
t1 = ()
t2 = tuple()
# создание кортежа из известных значений
t3 = (1, 2, 3)
# создание кортежа из одного элемента
# запятая - часть синтаксиса, позволяющая определить что это кортеж
t4 = (1,)
# создание кортежа из списка
t5 = tuple([1, 2, 3])
# создание кортежа из строки
t6 = tuple("Hello")
Если из контекста Python понимает что имеется в виду кортеж, то скобки можно не указывать:
a, b = 2, 5
print(a) # 2
print(b) # 5
a, b = b, a
print(a) # 5
print(b) # 2
Элементы кортежа можно обойти с помощью цикла for уже узвестными вам способами:
numbers = ('a', 'b', 'c')
for i in numbers:
print(i)
# a
# b
# c
for i in reversed(numbers):
print(i)
# c
# b
# a
for i, v in enumerate(numbers):
print(i, v)
# 0 a
# 1 b
# 2 c
Перечень операций при работе с кортежами напоминает операции со списками. Однако из-за неизменности (immutability) кортежей не все операций доступны.
+ — конкатенация (сцепление) двух кортежей в новый кортежt[0] — получение из кортежа t элемента с индексом 0==, !=, >, >=, <, <= — сравнение кортежейa in t — проверка что элемент a входит в кортеж ta not in t — проверка что элемент a не входит в кортеж tlen(t) — количество элементов в кортеже tt.count(a) — сколько раз значение a входит в кортеж tt.index(a) — возвращает индекс значения a в кортеже t (ошибка при отсутствии)При сортировке списков (метод .sort()) или создании отсортированной копии (функция sorted()) часто применяется именованный аргумент key.
Этот аргумент позволяет указать функцию для преобразования элементов. Если этот параметр указан, тогда для сравнения элементов при сортировке будет использоваться преобразованные значения.
Например, если нужно отсортировать список строк без учета регистра символов.
words = ['UVW', 'abc', 'ZYX', 'def']
print(sorted(words))
# ['UVW', 'ZYX', 'abc', 'def']
def low_case(s):
return s.lower()
print(sorted(words, key=low_case))
# ['abc', 'def', 'UVW', 'ZYX']
Если необходимо отсортировать элементы по нескольким критериям, то можно использовать функцию, которая возвращает кортеж из преобразованных значений.
Например, если нужно отсортировать список чисел сначала по возрастанию остатка от деления на 7, а при их равенстве по убыванию самих чисел:
numbers = [26, 6, 29, 23, 27, 29, 28, 5]
def convert(n):
return n % 7, -n
print(sorted(numbers, key=convert))
# [28, 29, 29, 23, 26, 5, 27, 6]
# 28 % 7 = 0
# 29 % 7 = 1
# 23 % 7 = 2
# 26 % 7 = 5 и 5 % 7 = 5
# 27 % 7 = 6 и 6 % 7 = 6