Кортеж
Кортеж — это структура данных, которая во многом похожа на список. Самые важные различия между ними:
- Кортежи заключаются в круглые скобки
(), а списки — в квадратные скобки[] - Кортежи неизменяемы, а содержимое списка может изменяться
Следующий фрагмент кода создает кортеж с координатами точки:
point = (10, 20)К элементам, хранящимся в кортеже, обращаются по индексу, как и к элементам списка:
point = (10, 20)
print("x coordinate:", point[0])
print("y coordinate:", point[1])x coordinate: 10 y coordinate: 20
Значения, хранящиеся в кортеже, нельзя изменить после того, как кортеж был определен. Следующее не сработает:
point = (10, 20)
point[0] = 15TypeError: 'tuple' object does not support item assignment
Для чего нужен кортеж?
Кортежи идеально подходят для ситуаций, когда есть фиксированный набор значений, которые каким-то образом связаны. Например, когда нужно работать с координатами x и y точки, кортеж — естественный выбор, потому что координаты всегда состоят из двух значений:
point = (10, 20)Технически, конечно, для хранения этих значений можно использовать и список:
point = [10, 20]Список — это коллекция последовательных элементов в определенном порядке. Размер списка также может изменяться. Когда мы храним координаты точки, мы хотим хранить именно координаты x и y, а не произвольный список, содержащий эти значения.
Поскольку кортежи неизменяемы, в отличие от списков, их можно использовать как ключи в словаре. Следующий фрагмент кода создает словарь, где ключами являются точки с координатами:
points = {}
points[(3, 5)] = "monkey"
points[(5, 0)] = "banana"
points[(1, 2)] = "harpsichord"
print(points[(3, 5)])Попытка определить похожий словарь с использованием списков не сработает:
points = {}
points[[3, 5]] = "monkey"
points[[5, 0]] = "banana"
points[[1, 2]] = "harpsichord"
print(points[[3, 5]])TypeError: unhashable type: 'list'
Кортежи без скобок
Круглые скобки не являются строго обязательными при определении кортежей. Следующие два присваивания переменным дают одинаковый результат:
numbers = (1, 2, 3)numbers = 1, 2, 3Это означает, что с помощью кортежей мы также можем легко возвращать несколько значений. Рассмотрим следующий пример:
def minmax(my_list):
return min(my_list), max(my_list)
my_list = [33, 5, 21, 7, 88, 312, 5]
min_value, max_value = minmax(my_list)
print(f"The smallest item is {min_value} and the greatest item is {max_value}")The smallest item is 5 and the greatest item is 312
Эта функция возвращает два значения в кортеже. Возвращаемое значение присваивается сразу двум переменным:
min_value, max_value = minmax(my_list)Использование круглых скобок может сделать запись более понятной. В левой части оператора прис ваивания у нас также кортеж, содержащий два имени переменных. Значения из кортежа, возвращенного функцией, присваиваются этим двум переменным.
(min_value, max_value) = minmax(my_list)Возможно, вы помните метод словаря items из предыдущего раздела. Мы использовали его для доступа ко всем ключам и значениям, хранящимся в словаре:
my_dictionary = {}
my_dictionary["apina"] = "monkey"
my_dictionary["banaani"] = "banana"
my_dictionary["cembalo"] = "harpsichord"
for key, value in my_dictionary.items():
print("key:", key)
print("value:", value)Здесь кортежи тоже работают. Метод my_dictionary.items() возвращает каждую пару ключ-значение как кортеж, где первый элемент — ключ, а второй — значение.
Еще один распространенный случай использования кортежей — обмен значениями двух переменных:
number1, number2 = number2, number1Оператор присваивания выше меняет местами значения, хранящиеся в переменных number1 и number2. Результат идентичен тому, что достигается следующим фрагментом кода с использованием вспомогательной переменной:
helper_var = number1
number1 = number2
number2 = helper_varОтветьте, пожалуйста, на короткую анкету по материалам этой недели.
Текущие баллы можно посмотреть в синем индикаторе в правом нижнем углу страницы.