Inspecting zipped data seems to erase it

Viewed 34

When I inspect my zipped data, it acts as if it has been erased. First, create zip object:

numbers = [1, 2, 3]
letters = ['a', 'b', 'c']
numbers_letters = zip(numbers, letters) 
print(list(numbers_letters))

As expected you see the list containing the tuples:

[(1, 'a'), (2, 'b'), (3, 'c')]

But now:

print(list(numbers_letters))

returns an empty list. Where did my data go?

2 Answers

Iterators are designed to generate data on the fly exactly one time, no more.

By doing:

print(list(numbers_letters))

For the first time, you have exhausted the iterator. So, the second time there is nothing left to iterate!

This is because zip returns an iterator in Python3.x. You can only iterate over an iterator once.

I suggest using:

print(list(zip(numbers, letters)))

In simple terms, considering you have knowledge about pointers to nodes in a linked list(C, C++), once you traverse through the list using the head pointer, you can't use it again to start from the head.

Related