pivot() equivalent

MRAB python at mrabarnett.plus.com
Thu Mar 11 18:50:13 EST 2010


gundlach wrote:
> I *know* this already exists, but I can't remember where:
> 
> def pivot(func, seq):
>   # I know, a good implementation shouldn't call func() twice per item
>   return ( (x for x in seq if func(x)), (x for x in seq if not
> func(x)) )
> 
> I feel like I read a thread in which this was argued to death, and I
> can't find that either.
> 
> The scenario: I have a sequence of lines from a file.  I want to split
> it into those lines that contain a substring, and those that don't.  I
> want it to be more efficient and prettier than
> 
> with = [x for x in lines if substring in x]
> without = [x for x in lines if substring not in x]
> 
> Does this exist?
> 
The clearest way is just:

def pivot(func, seq):
     with, without = [], []
     for x in seq:
         if func(x):
             with.append(x)
         else:
             without.append(x)
     return with, without



More information about the Python-list mailing list