Функция zip()

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

Функция zip() — один из самых элегантных инструментов Python для работы сразу с несколькими коллекциями. Представь, что у тебя есть два списка: имена студентов и их оценки. Вместо того чтобы городить индексы и len(), ты просто «сшиваешь» эти списки вместе и идёшь по ним параллельно. Красиво, правда?

В этом тренажере разберёмся, как zip() создаёт пары (и тройки, и больше) из элементов разных последовательностей, что происходит когда списки разной длины, как распаковать результат обратно и где это реально пригождается. Будут задания на заполнение пропусков, поиск ошибок, сборку кода и предсказание результатов. Сложность растёт постепенно — от базового синтаксиса до практических кейсов вроде создания словарей и транспонирования матриц.

Список тем

1. Базовый синтаксис zip()

id: 39990_task1

Дан код, который должен объединить два списка — имена и возрасты — в пары. Заполните пропуски, чтобы код работал корректно и вывел список кортежей.

Заполните пропуски
names = ['Anna', 'Boris', 'Clara']
ages = [25, 30, 28]

pairs = input1S(input2S(names, ages))
print(pairs)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Что вернёт zip() для списков разной длины?

id: 39990_task2

Посмотрите на код внимательно. Списки имеют разную длину. Что будет выведено на экран?

Выберите правильный вариант ответа
letters = ['a', 'b', 'c', 'd', 'e']
numbers = [1, 2, 3]

result = list(zip(letters, numbers))
print(result)
Сообщения
Проверить
Показать подсказку

3. Исправьте ошибку в цикле с zip()

id: 39990_task3

Программист хотел вывести пары "продукт — цена", но допустил ошибку в синтаксисе распаковки. Найдите и исправьте проблемную строку.

Найдите ошибку и исправьте
products = ['Apple', 'Bread', 'Milk']
prices = [1.5, 2.0, 1.2]
 
for (product: price) in zip(products, prices):
    print(f'{product}: ${price}')
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Создание словаря из двух списков

id: 39990_task4

Один из популярных паттернов — создание словаря из списка ключей и списка значений. Расставьте элементы из банка токенов, чтобы получить словарь стран и их столиц.

Нужно правильно расставить в пропуски предложенные варианты
countries = ['France', 'Japan', 'Brazil']
capitals = ['Paris', 'Tokyo', 'Brasilia']

country_capitals = input1S(input2S(input3S, input4S))
print(country_capitals)
dict
zip
countries
capitals
list
tuple
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Сумма элементов с одинаковыми индексами

id: 39990_task5

Код суммирует элементы двух списков попарно и выводит общую сумму всех результатов. Какое число будет выведено?

Что должно получиться?
list1 = [1, 2, 3]
list2 = [10, 20, 30]

total = sum(a + b for a, b in zip(list1, list2))
print(total)
Сообщения
Проверить
Показать подсказку

6. Сопоставьте код и результат

id: 39990_task6

Дан базовый список x = [1, 2, 3] и y = ['a', 'b', 'c']. Сопоставьте каждое выражение с его результатом.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
[(1, 'a'), (2, 'b'), (3, 'c')]
{1: 'a', 2: 'b', 3: 'c'}
{'a': 1, 'b': 2, 'c': 3}
<zip object at 0x...>
list(zip(x, y))
zip(x, y)
dict(zip(x, y))
dict(zip(y, x))
Сообщения
Проверить
Показать подсказку

7. Классификация: zip() vs enumerate()

id: 39990_task7

Обе функции часто используются в циклах, но для разных целей. Распределите утверждения по категориям.

Перетяните элементы в соответствующие блоки
Особенности zip()
Особенности enumerate()
Объединяет элементы из нескольких списков
Добавляет индекс к каждому элементу
Останавливается на самом коротком списке
Принимает параметр start для начального значения счётчика
Используется для параллельной итерации
Возвращает пары (индекс, элемент)
Сообщения
Проверить
Показать подсказку

8. Соберите код: распаковка zip-объекта

id: 39990_task8

Есть список пар (кортежей). Нужно "распаковать" его обратно в два отдельных списка с помощью 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()
# Распаковываем пары обратно в отдельные последовательности
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

9. zip() с тремя последовательностями

id: 39990_task9

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()

id: 39990_task10

Транспонирование — это превращение строк в столбцы. С помощью zip() и распаковки это делается в одну строку. Заполните пропуски.

Заполните пропуски
matrix = [
    [1, 2, 3],
    [4, 5, 6]
]

# Транспонируем: строки становятся столбцами
transposed = [list(row) for row in input1S(input2Smatrix)]
print(transposed)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

11. Исправьте создание словаря с enumerate и zip

id: 39990_task11

Программист хотел создать словарь, где ключи — это индексы, а значения — пары (имя, оценка). Но код выдаёт ошибку. Найдите и исправьте проблему.

Найдите ошибку и исправьте
names = ['Alice', 'Bob']
scores = [95, 87]
 
result = dict(enumerate(zip(names, scores)))
print(result)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

12. Подсчёт совпадений в двух списках

id: 39990_task12

Код сравнивает два списка поэлементно и считает количество позиций, где элементы совпадают. Введите результат.

Что должно получиться?
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. Восстановите порядок: объединение данных из трёх источников

id: 39990_task13

Расставьте строки кода в правильном порядке. Программа должна: объявить три списка, объединить их с помощью 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() с пустым списком

id: 39990_task14

Что произойдёт, если один из списков пустой? Выберите правильный результат.

Выберите правильный вариант ответа
data = [1, 2, 3, 4, 5]
empty = []

result = list(zip(data, empty))
print(result)
print(len(result))
Сообщения
Проверить
Показать подсказку

Python: запуск кода в браузере

id: 39990_compiler
🐍
Запустить тренажёр (Python)
НайтиКурс.Ру