The zip() function in Python 3
I know how to use the
zip() function in Python 3. My question is regarding the following which I somehow feel quite peculiar:
I define two lists:
lis1 = [0, 1, 2, 3] lis2 = [4, 5, 6, 7]
and I use the
zip() on these in the following ways:
1. test1 = zip( lis1, lis2) 2. test2 = list(zip(lis1, lis2))
when I type
test1 at the interpreter, I get this:
"zip object at 0x1007a06c8"
So, I type
list(test1) at the interpreter and I get the intended result, but when I type
list(test1) again, I get an empty list.
What I find peculiar is that no matter how many times I type
test2 at the interpreter I always get the intended result and never an empty list.
Unlike in Python 2, the
zip function in Python 3 returns an iterator. Iterators can only be exhausted (by something like making a list out of them) once. The purpose of this is to save memory by only generating the elements of the iterator as you need them, rather than putting it all into memory at once. If you want to reuse your zipped object, just create a list out of it as you do in your second example, and then duplicate the list by something like
test2 = list(zip(lis1,lis2)) zipped_list = test2[:] zipped_list_2 = list(test2)