Модульні уроки (2/4)
Кортежі та розпакування
Кортеж — це впорядкована та незмінна послідовність: після створення ви можете більше не змінювати його елементи. Пишеться в дужках (хоча що насправді визначає це кома).
Створення кортежу
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
nome, anni = ("Ada", 36)
nome # 'Ada'
anni # 36Він також працює без дужок (це кома, яка визначає кортеж):
x, y = 10, 20І це дозволяє замінювати без тимчасової змінної, чистий Python ідіома:
a, b = 1, 2
a, b = b, a
a, b # (2, 1)Розпакування за допомогою * (решта)
Коли ви хочете зафіксувати «першого та решту» або «першого, останнього, середина":
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 у круглих дужках. Щоб зробити a
для одноелементного кортежу потрібна кома: (42,). Без нього ніяка операція
не вдається заплутаним чином.
x = (42)
type(x) # <class 'int'>
x = (42,)
type(x) # <class 'tuple'>Одноелементні кортежі
Щоб створити кортеж, що містить лише один елемент, одних дужок недостатньо: ви повинні вставити кінцеву кому, наприклад t = (42,). Без коми Python сприймає круглі дужки як просте математичне групування, створюючи звичайне ціле число 42.
Спробуйте
Якщо задано `a = 1` і `b = 2`, поміняйте їх значення в одному рядку (розпакування кортежу) і обчисліть кортеж (a, b).
Показати підказку
a, b = b, a
Рішення доступне після 3 спроб
Повторна вправа
Зі списку `voti = [7, 5, 8, 6, 9]` скористайтеся розпакуванням, щоб витягти перший клас у `primo`, останній — у `ultimo`, а решта — у `centro`. Оцініть `(primo, centro, ultimo)`.
Показати підказку
primo, *centro, ultimo = voti → primo=7, centro=[5,8,6], ultimo=9.
Рішення доступне після 3 спроб
Додатковий виклик
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 спроб