В этом модуле мы углубимся в работу с кортежами в Python и изучим мощный механизм — распаковку кортежей (Tuple Unpacking).
Распаковка позволяет присваивать элементы кортежа (или любого итерируемого объекта) отдельным переменным в одной строке кода. Это делает код лаконичным и читаемым. Вы узнаете:
- Как быстро поменять значения переменных местами без временной переменной.
- Как использовать оператор
*(звездочка) для сбора "остальных" элементов в список. - Как работать с вложенными структурами данных.
- Типичные ошибки при распаковке, такие как несоответствие количества переменных и элементов.
Выполните задания от простых к сложным, чтобы закрепить навык написания "pythonic" кода!
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Модуль 6: Циклы
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Создание кортежей.
- Неизменяемость кортежей.
- Распаковка кортежей.
- Именованные кортежи.
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
Основы распаковки
Проанализируйте код. Мы создаем кортеж с координатами, а затем распаковываем его в три отдельные переменные. Какое значение будет выведено на экран?
coordinates = (10, 25, 88)
x, y, z = coordinates
print(y)Pythonic Way: Обмен значений
В Python можно поменять значения двух переменных местами в одну строку, используя распаковку кортежей. Заполните пропуски так, чтобы переменная a получила значение b, а b получила значение a.
a = "Красный"
b = "Синий"
# Меняем местами
a, b = input1S, input2S
print(f"a: {a}, b: {b}")Создание и распаковка
Восстановите логический порядок действий: создание строки, разделение её на список и распаковка полученных частей в переменные.
print(f"Имя: {name}, Домен: {domain}")name, domain = email_partsemail_parts = user_email.split('@')user_email = "student@example.com"Ошибка: Too many values to unpack
Код вызывает ошибку ValueError, так как в кортеже 3 элемента, а переменных для приема всего две. Исправьте строку распаковки, добавив недостающую переменную blue, чтобы исправить ошибку.
colors = ('Red', 'Green', 'Blue')red, green = colorsprint(green)Сбор лишних элементов
Используйте оператор * (звездочка), чтобы собрать все оценки, кроме первой и последней, в отдельный список. Расставьте элементы из банка так, чтобы код работал корректно.
scores = [10, 8, 9, 5, 10]
input1S, input2S, input3S = scores
print(middle)Валидный и невалидный синтаксис
Распределите примеры кода на две группы: корректная распаковка и код, который вызовет SyntaxError.
a, *b, c = (1, 2, 3, 4)*a, b = (1, 2, 3)a, b = (1, 2)*a, *b = (1, 2, 3)a, *b, *c = (1, 2, 3, 4)Распаковка в цикле for
Соберите цикл, который проходит по словарю prices и распаковывает каждую пару (ключ, значение) для вывода. Используйте метод .items().
print(f"{item}: {price}")for item, price in prices.items():prices = {'Apple': 10, 'Banana': 5}for item, price in prices: print(f"{item}: {prices[item]}")Что попадет в переменную со звездочкой?
Сопоставьте код распаковки слева с тем значением, которое окажется в переменной rest (список с остальными элементами). Исходный кортеж всегда: (1, 2, 3, 4, 5).
[2, 3, 4, 5][1, 2, 3, 4][3][]a, *rest = (1, 2, 3, 4, 5)*rest, z = (1, 2, 3, 4, 5)a, b, *rest, d, e = (1, 2, 3, 4, 5)a, b, c, d, e, *rest = (1, 2, 3, 4, 5)Вложенная распаковка
Проанализируйте код с вложенной распаковкой. Мы игнорируем некоторые значения, используя символ подчеркивания _. Введите значение, которое выведет print(lang). Ответ должен быть строкой без кавычек.
person_info = ("Alex", (30, "Python"))
# Распаковка вложенного кортежа
name, (_, lang) = person_info
print(lang)