classification
Title: loop in loop with with 'zip'ped object misbehaves in py3.6
Type: behavior Stage: resolved
Components: Versions: Python 3.6
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: Vishu Viswanathan, ronaldoussoren, serhiy.storchaka, steven.daprano
Priority: normal Keywords:

Created on 2017-12-07 14:15 by Vishu Viswanathan, last changed 2017-12-08 06:04 by Vishu Viswanathan. This issue is now closed.

Files
File name Uploaded Description Edit
py3.6_vs_py2.7.ipynb Vishu Viswanathan, 2017-12-07 14:15 Anaconda notebook
Messages (6)
msg307803 - (view) Author: Vishu Viswanathan (Vishu Viswanathan) Date: 2017-12-07 14:15
The file shows the results by running in Py3.6 and 2.7
In my opinion Py2.7 results matches what I expected.

In this bug or the zip function behaviour is changed with some purpose
msg307804 - (view) Author: Steven D'Aprano (steven.daprano) * (Python committer) Date: 2017-12-07 14:23
I'm sorry, I have no idea how to read an Anaconda notebook file. In the browser it looks like some sort of nested dictionary. I can find the code:

j = [1, 2, 3, 4]
k = [5, 6, 7, 8]
z = zip(j, k)
for x, y in z:
    for m, n in z:
        print (x, y, m, n)


but I'm not sure what result you are getting or what results you expect.
msg307805 - (view) Author: Ronald Oussoren (ronaldoussoren) * (Python committer) Date: 2017-12-07 14:29
If the nested loop is the issue the Python 3 version behaves as expected.

A difference between python2 and python3 is that the zip() builtin returns a list on python2 and an iterator on python3. This explains the difference in results in running the code on the two versions.

To get the same behaviour on Python 2 and Python 3 use "list(zip(j, k))".
msg307806 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2017-12-07 14:32
In Python 2 zip() returns a list. In Python 3 it returns an iterator (like itertools.izip() in Python 2). This is an intentional change. For restoring the Python 2 behavior you should wrap the result of zip() into list(): z = list(zip(j, k)). The 2to3 command can do this for you.
msg307807 - (view) Author: Steven D'Aprano (steven.daprano) * (Python committer) Date: 2017-12-07 14:33
I decided to run the code in 3.5 and 2.7, and now that I know what I'm looking for, I can see the results buried in the Anaconda notebook.

This is not a bug, zip has been changed in Python 3 to return an iterator instead of a list. To get the same results as Python 2.7, change the line:

z = zip(j, k)

to:

z = list(zip(j, k))

To get the same results in 2.7 as in 3, change it to:

z = iter(zip(j, k))

This is documented and is not a bug.

https://docs.python.org/3.0/whatsnew/3.0.html#views-and-iterators-instead-of-lists

https://docs.python.org/3/library/functions.html#zip
msg307836 - (view) Author: Vishu Viswanathan (Vishu Viswanathan) Date: 2017-12-08 06:04
Thanks for the fast response and clarification. Now I can run my code made
for  py2.7  also run in py3.6
I should search and read documentation before reporting.

Thanks

On Thu, Dec 7, 2017 at 8:03 PM, Steven D'Aprano <report@bugs.python.org>
wrote:

>
> Steven D'Aprano <steve+python@pearwood.info> added the comment:
>
> I decided to run the code in 3.5 and 2.7, and now that I know what I'm
> looking for, I can see the results buried in the Anaconda notebook.
>
> This is not a bug, zip has been changed in Python 3 to return an iterator
> instead of a list. To get the same results as Python 2.7, change the line:
>
> z = zip(j, k)
>
> to:
>
> z = list(zip(j, k))
>
> To get the same results in 2.7 as in 3, change it to:
>
> z = iter(zip(j, k))
>
> This is documented and is not a bug.
>
> https://docs.python.org/3.0/whatsnew/3.0.html#views-and-
> iterators-instead-of-lists
>
> https://docs.python.org/3/library/functions.html#zip
>
> ----------
>
> _______________________________________
> Python tracker <report@bugs.python.org>
> <https://bugs.python.org/issue32242>
> _______________________________________
>
History
Date User Action Args
2017-12-08 06:04:49Vishu Viswanathansetmessages: + msg307836
2017-12-07 14:33:16steven.dapranosetmessages: + msg307807
2017-12-07 14:32:28serhiy.storchakasetstatus: open -> closed

nosy: + serhiy.storchaka
messages: + msg307806

resolution: not a bug
stage: resolved
2017-12-07 14:29:48ronaldoussorensetnosy: + ronaldoussoren
messages: + msg307805
2017-12-07 14:23:18steven.dapranosetnosy: + steven.daprano
messages: + msg307804
2017-12-07 14:15:53Vishu Viswanathancreate