On Tue, 22 Nov 2005 14:28:56 GMT, "David Isaac" <[EMAIL PROTECTED]> wrote:

>
>"Duncan Booth" <[EMAIL PROTECTED]> wrote in message
>news:[EMAIL PROTECTED]
>> >>> aList = ['a', 1, 'b', 2, 'c', 3]
>> >>> it = iter(aList)
>> >>> zip(it, it)
>> [('a', 1), ('b', 2), ('c', 3)]
>
>That behavior is currently an accident.
>http://sourceforge.net/tracker/?group_id=5470&atid=105470&func=detail&aid=1121416
>Alan Isaac
>
That says
"""
ii. The other problem is easier to explain by example.
Let it=iter([1,2,3,4]).
What is the result of zip(*[it]*2)?
The current answer is: [(1,2),(3,4)],
but it is impossible to determine this from the docs,
which would allow [(1,3),(2,4)] instead (or indeed
other possibilities).
"""
IMO left->right is useful enough to warrant making it defined behaviour,
not an accident. Isn't it(),it() well defined for a given iterator?
So is the question whether zip will access its referenced input iterators
in some peculiar order? Is the order of zip(a,b) accesses to a and b
undefined? If, so, IMO it's reasonable to make it defined as if

 >>> def zip(*args):
 ...     return list(tuple([it.next() for it in its])
 ...                     for its in [[iter(a) for a in args]]
 ...                         for _ in iter(lambda:0,1))
 ...
 >>> aList = ['a', 1, 'b', 2, 'c', 3]
 >>> it = iter(aList)
 >>> zip(it, it)
 [('a', 1), ('b', 2), ('c', 3)]
 >>> it = iter(aList)
 >>> zip(it, it, it)
 [('a', 1, 'b'), (2, 'c', 3)]
 >>> it = iter(aList)
 >>> zip(it)
 [('a',), (1,), ('b',), (2,), ('c',), (3,)]
 >>> zip(range(3), range(4))
 [(0, 0), (1, 1), (2, 2)]
 >>> zip(range(4), range(3))
[ (0, 0), (1, 1), (2, 2)]

(I just hacked this out, so maybe it's not bullet-proof, but the point is,
I think there's no reason not to define the behaviour of zip to cycle
through its arguments in the intuitive way).

Regards,
Bengt Richter
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to