Part 5

Кортеж

Кортеж — это структура данных, которая во многом похожа на список. Самые важные различия между ними:

  • Кортежи заключаются в круглые скобки (), а списки — в квадратные скобки []
  • Кортежи неизменяемы, а содержимое списка может изменяться

Следующий фрагмент кода создает кортеж с координатами точки:

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] = 15
Пример вывода

TypeError: 'tuple' object does not support item assignment

Loading
Loading
Loading

Для чего нужен кортеж?

Кортежи идеально подходят для ситуаций, когда есть фиксированный набор значений, которые каким-то образом связаны. Например, когда нужно работать с координатами 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)])
Пример вывода
monkey

Попытка определить похожий словарь с использованием списков не сработает:

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
Loading
Loading

Ответьте, пожалуйста, на короткую анкету по материалам этой недели.

Вы дошли до конца этого раздела!

Текущие баллы можно посмотреть в синем индикаторе в правом нижнем углу страницы.

В этой части:
  1. 1. Дополнительные списки

  2. 2. Ссылки

  3. 3. Словарь

  4. 4. Кортеж