Если вы запускаете предоставленный код с самого начала, он работает (за исключением того, что odj2
должно быть obj2
).
Причина вашей путаницы в том, что объект zip
является итератором . Он не хранит элементы в памяти, а генерирует их на лету по мере необходимости. Вы не можете получить доступ к предыдущим элементам или перезапустить итератор; вместо этого вы должны построить новый. Поэтому, если вам нужно будет повторять такие последовательности более одного раза, вам следует преобразовать их в постоянные структуры данных, такие как lists
. Например:
x = [1, 2, 3]
y = ['a', 'b', 'c']
zip_object = zip(x, y)
print('first time:')
for first, second in zip_object:
print(first, second)
print('second time:')
for first, second in zip_object:
print(first, second)
print('done')
Выход:
first time
1 a
2 b
3 c
second time
done
Сравните это с тем случаем, когда вы используете объект zip
для создания list
:
zip_object = zip(x, y)
new_list = list(zip_object)
print('first time:')
for first, second in new_list:
print(first, second)
print('second time:')
for first, second in new_list:
print(first, second)
print('going back to the zip object')
for first, second in zip_object:
print(first, second)
print('done')
Выход:
first time
1 a
2 b
3 c
second time
1 a
2 b
3 c
going back to the zip object
done
Произошло то, что вы перебрали где-то obj1
, а затем, не создав новый объект zip
, попытались повторить его снова. Поскольку он уже был полностью исчерпан, цикл for
не мог повторяться.