В отладке вы сделали pairs = zip(users, spends), затем debug = list(pairs). После этого d = dict(pairs) оказался пустым словарём. Почему?
A
dict() не принимает результат zip() без явного приведения к списку пар.B
zip() сортирует данные по первому аргументу и удаляет одинаковые ключи.CНужно было писать
pairs = zip(spends, users), иначе ключи и значения меняются местами.D
zip() возвращает одноразовый итератор, и list(pairs) уже исчерпало его до конца.Правильный ответ.
zip() возвращает одноразовый итератор: после первого полного обхода он становится пустым.Разбор
После pairs = zip(users, spends) объект pairs — это итератор, который выдаёт пары один раз. debug = list(pairs) уже прошёл его до конца, поэтому следующий dict(pairs) ничего не получает и возвращает пустой словарь. Чтобы такого не было, либо сразу собирают пары в список и переиспользуют его, либо создают новый zip(...) перед dict(...). zip ничего не сортирует и не отбрасывает; порядок аргументов меняет лишь, что станет ключом, а что значением, но не объясняет пустоту словаря.
Проверь себя · 1/3разбор после ответа
Что произойдёт при выполнении
it = iter([]) и затем next(it)?Ещё вопросы по теме «Итераторы и генераторы»
- Есть `xs = [1, 2, 3]` и `it = iter(xs)`. Сначала выполняется `a = list(it)`, а затем `b = list(it)`. Чему равно `b`?
- Есть `it = iter(['a', 'b'])`. Что вернёт самый первый вызов `next(it)` сразу после создания итератора?
- Дан генератор: `def gen(): print("A"); yield 1; print("B"); yield 2`. Сразу после `g = gen()` что будет выведено в консоль?
- Что создаёт выражение `squares = (x * x for x in xs)`?
- Что произойдёт при выполнении `it = iter([])` и затем `next(it)`?
- Все вопросы по «Итераторы и генераторы» →