Функция zip() — один из самых элегантных инструментов Python для работы сразу с несколькими коллекциями. Представь, что у тебя есть два списка: имена студентов и их оценки. Вместо того чтобы городить индексы и len(), ты просто «сшиваешь» эти списки вместе и идёшь по ним параллельно. Красиво, правда?
В этом тренажере разберёмся, как zip() создаёт пары (и тройки, и больше) из элементов разных последовательностей, что происходит когда списки разной длины, как распаковать результат обратно и где это реально пригождается. Будут задания на заполнение пропусков, поиск ошибок, сборку кода и предсказание результатов. Сложность растёт постепенно — от базового синтаксиса до практических кейсов вроде создания словарей и транспонирования матриц.
- Модуль 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: Продвинутые возможности
1. Базовый синтаксис zip()
Дан код, который должен объединить два списка — имена и возрасты — в пары. Заполните пропуски, чтобы код работал корректно и вывел список кортежей.
names = ['Anna', 'Boris', 'Clara']
ages = [25, 30, 28]
pairs = input1S(input2S(names, ages))
print(pairs)2. Что вернёт zip() для списков разной длины?
Посмотрите на код внимательно. Списки имеют разную длину. Что будет выведено на экран?
letters = ['a', 'b', 'c', 'd', 'e']
numbers = [1, 2, 3]
result = list(zip(letters, numbers))
print(result)3. Исправьте ошибку в цикле с zip()
Программист хотел вывести пары "продукт — цена", но допустил ошибку в синтаксисе распаковки. Найдите и исправьте проблемную строку.
products = ['Apple', 'Bread', 'Milk']prices = [1.5, 2.0, 1.2] for (product: price) in zip(products, prices): print(f'{product}: ${price}')4. Создание словаря из двух списков
Один из популярных паттернов — создание словаря из списка ключей и списка значений. Расставьте элементы из банка токенов, чтобы получить словарь стран и их столиц.
countries = ['France', 'Japan', 'Brazil']
capitals = ['Paris', 'Tokyo', 'Brasilia']
country_capitals = input1S(input2S(input3S, input4S))
print(country_capitals)5. Сумма элементов с одинаковыми индексами
Код суммирует элементы двух списков попарно и выводит общую сумму всех результатов. Какое число будет выведено?
list1 = [1, 2, 3]
list2 = [10, 20, 30]
total = sum(a + b for a, b in zip(list1, list2))
print(total)6. Сопоставьте код и результат
Дан базовый список x = [1, 2, 3] и y = ['a', 'b', 'c']. Сопоставьте каждое выражение с его результатом.
list(zip(x, y))zip(x, y)dict(zip(x, y))dict(zip(y, x))7. Классификация: zip() vs enumerate()
Обе функции часто используются в циклах, но для разных целей. Распределите утверждения по категориям.
8. Соберите код: распаковка zip-объекта
Есть список пар (кортежей). Нужно "распаковать" его обратно в два отдельных списка с помощью zip() и оператора *. Соберите код в правильном порядке. Одна строка лишняя.
print(f'Names: {list(names)}')pairs = [('Alice', 25), ('Bob', 30), ('Clara', 28)]names, ages = zip(*pairs)print(f'Ages: {list(ages)}')names, ages = unzip(pairs)names, ages = pairs.split()# Распаковываем пары обратно в отдельные последовательности9. zip() с тремя последовательностями
zip() может принимать больше двух аргументов. Проанализируйте код и выберите, что он выведет.
ids = [1, 2]
names = ['Alice', 'Bob']
scores = [95, 87]
for id, name, score in zip(ids, names, scores):
print(f'#{id} {name}: {score}')10. Транспонирование матрицы с zip()
Транспонирование — это превращение строк в столбцы. С помощью zip() и распаковки это делается в одну строку. Заполните пропуски.
matrix = [
[1, 2, 3],
[4, 5, 6]
]
# Транспонируем: строки становятся столбцами
transposed = [list(row) for row in input1S(input2Smatrix)]
print(transposed)11. Исправьте создание словаря с enumerate и zip
Программист хотел создать словарь, где ключи — это индексы, а значения — пары (имя, оценка). Но код выдаёт ошибку. Найдите и исправьте проблему.
names = ['Alice', 'Bob']scores = [95, 87] result = dict(enumerate(zip(names, scores)))print(result)12. Подсчёт совпадений в двух списках
Код сравнивает два списка поэлементно и считает количество позиций, где элементы совпадают. Введите результат.
list1 = [1, 2, 3, 4, 5]
list2 = [1, 0, 3, 0, 5]
matches = sum(a == b for a, b in zip(list1, list2))
print(matches)13. Восстановите порядок: объединение данных из трёх источников
Расставьте строки кода в правильном порядке. Программа должна: объявить три списка, объединить их с помощью zip() в цикле и вывести отформатированную информацию о каждом сотруднике.
salaries = [50000, 60000, 55000]departments = ['IT', 'HR', 'Sales']for name, dept, salary in zip(names, departments, salaries):names = ['Alice', 'Bob', 'Clara'] print(f'{name} ({dept}): ${salary}')14. zip() с пустым списком
Что произойдёт, если один из списков пустой? Выберите правильный результат.
data = [1, 2, 3, 4, 5]
empty = []
result = list(zip(data, empty))
print(result)
print(len(result))