iterating "by twos"

Erik Max Francis max at alcyone.com
Tue Jul 29 22:11:57 CEST 2008


giltay at gmail.com wrote:

> On Jul 29, 1:36 pm, kj <so... at 987jk.com.invalid> wrote:
>> Is there a special pythonic idiom for iterating over a list (or
>> tuple) two elements at a time?
> 
>      I use this one a lot:
> 
> for x, y in zip(a, a[1:]):
>     frob(x, y)

It doesn't work:

 >>> a = range(10)
 >>> [(x, y) for x, y in zip(a, a[1:])]
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]

What you meant was this:

 >>> [(x, y) for x, y in zip(a[::2], a[1::2])]
[(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)]

but this creates three sublists through slicing and zip.  The use of 
islice and izip is better, particularly if the list that's being 
iterated over is large.

-- 
Erik Max Francis && max at alcyone.com && http://www.alcyone.com/max/
  San Jose, CA, USA && 37 18 N 121 57 W && AIM, Y!M erikmaxfrancis
   Tell me the truth / I'll take it like a man
    -- Chante Moore



More information about the Python-list mailing list