Перейти к основному содержимому
Модуль 3 · Урок 2 из 410/36 в курсе~10 min
Уроки модуля (2/4)

Кортежи и распаковка

Кортеж — это упорядоченная и неизменяемая последовательность: после создания вы можете больше не меняйте его элементы. Пишется в скобках (хотя на самом деле это определяет запятая).

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

Python
vuota = ()
una = (42,)             # ATTENZIONE: senza virgola, (42) è solo 42 fra parentesi
coords = (10, 20)
mista = ("Ada", 36, True)

Доступ по индексу и нарезка работают точно так же, как и для списков: coords[0], coords[-1], mista[:2].

Когда использовать кортеж вместо списка

– Если значение представляет собой фиксированную коллекцию, которая не должна меняться. (координаты, дата (year, month, day), версия (1, 2, 3)).

  • Когда вам нужно использовать значение как ключ словаря или как элемент a set: можно использовать только неизменяемые (хэшируемые) объекты.
  • Когда вы хотите сообщить читателю кода, что это значение «замороженный».

Распаковка: функция, которая меняет способ написания Python

Python
nome, anni = ("Ada", 36)
nome   # 'Ada'
anni   # 36

Это также работает без круглых скобок (это запятая, которая определяет кортеж):

Python
x, y = 10, 20

И это позволяет обмен без временной переменной, чистый Python идиома:

Python
a, b = 1, 2
a, b = b, a
a, b   # (2, 1)

Распаковка с помощью * (остальное)

Если вы хотите запечатлеть «первое и остальное» или «первое, последнее, середина»:

Python
primo, *resto = [1, 2, 3, 4, 5]
primo   # 1
resto   # [2, 3, 4, 5]

primo, *centro, ultimo = [1, 2, 3, 4, 5]
centro  # [2, 3, 4]

Это называется помеченное задание: звезда собирает все, что остается в списке.

Ловушка одноэлементного кортежа

(42) — это не кортеж, это число 42 в круглых скобках. Чтобы сделать одноэлементный кортеж, вам нужна запятая: (42,). Без него любая операция терпит неудачу в запутанном виде.

Python
x = (42)
type(x)   # <class 'int'>
x = (42,)
type(x)   # <class 'tuple'>

Одноэлементные кортежи

Чтобы создать кортеж, содержащий только один элемент, одних круглых скобок недостаточно: необходимо вставить завершающую запятую, например t = (42,). Без запятой Python рассматривает круглые скобки как простую математическую группировку, создавая простое целое число 42.

Попробуйте это

Упражнение#python.m3.l2.e1
Попыток: 0Загрузка…

Учитывая `a = 1` и `b = 2`, поменяйте их значения в одной строке (распаковка кортежа) и вычислите кортеж (a, b).

Загрузка редактора…
Показать подсказку

а, б = б, а

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#python.m3.l2.e2
Попыток: 0Загрузка…

Из списка `voti = [7, 5, 8, 6, 9]` распаковкой извлеките первый сорт в `primo`, последний в `ultimo` и оставшиеся в `centro`. Оцените `(primo, centro, ultimo)`.

Загрузка редактора…
Показать подсказку

primo, *centro, ultimo = воти → primo=7, centro=[5,8,6], ultimo=9.

Решение доступно после 3 попыток

Дополнительная задача

Упражнение#python.m3.l2.e3
Попыток: 0Загрузка…

Given the tuple `point = (4, 5, 6)`, use unpacking to assign the three values to the variables `x`, `y`, `z` respectively. Then, calculate the sum of `x`, `y`, and `z` and store it in `coord_sum`. Finally, evaluate `coord_sum`.

Загрузка редактора…
Показать подсказку

Используйте x, y, z = point, чтобы извлечь три координаты в одном операторе.

Решение доступно после 3 попыток