On 01/04/15 05:50, Jim Mooney wrote:
I'm looking at this and can't see how it works, although I understand
zipping and unpacking. The docs say it's a Python idiom. Does "idiom" mean
it works in a special way so I can't figure it out from basic principles?

No idiom means a common pattern of usage in the community.
In this case thats true of zip(), its less true of this
case which is somewhat obscure.

It looks to me like the iterator in the list gets doubled, so the zip
should make it [(1,1),(2,2),(3,3),... ], not [(1,2),(3,4),...]

What am I missing here?

The fact that thew list contains a reference to an iterator
so when you multiply by two you get two references
to *the same* iterator.

So each time the iterator gets accessed it returns the next
number in the sequence, not the same number twice.

s = [1,2,3,4,5,6,7,8]
list(zip(*[iter(s)]*2))
[(1, 2), (3, 4), (5, 6), (7, 8)]

Personally I'd have used slicing in this example:

zip(s[::2],s[1::2])

Is that any clearer?

--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my photo-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos


_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to