dropwhile question

Scott David Daniels Scott.Daniels at Acm.Org
Sat Aug 23 18:41:36 EDT 2008


Rajanikanth Jammalamadaka wrote:
>>>> list(itertools.dropwhile(lambda x: x<5,range(10)))
> [5, 6, 7, 8, 9]
> 
> Why doesn't this work?
>>>> list(itertools.dropwhile(lambda x: 2<x<5,range(10)))
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Because it drops _while_ the condition is True (which it is for
the first 0 entries in the sequence).  What you want is:

     list(x for x in range(10) if 2 < x < 5)

Note that:
     list(itertools.dropwhile(lambda x: x<5, range(10)+range(10)))
is [5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
not [5, 6, 7, 8, 9, 5, 6, 7, 8, 9].

--Scott David Daniels
Scott.Daniels.Acm.Org



More information about the Python-list mailing list