any modules having a function to partition a list by predicate provided?

Bryan bryanjugglercryptographer at yahoo.com
Tue Apr 20 04:58:32 EDT 2010


knifenomad wrote:
> i know it's not very hard to get that solution.
> just by implementing simple function like below.
>
>       def partition(target, predicate):
>             """
>             split a list into two partitions with a predicate
> provided.
>             any better ideas? :)
>             """
>             true = []
>             false= []
>             for item in target:
>                 if predicates(item):
>                     true.append(item)
>                 else:
>                     false.append(item)
>             return true, false
>
> but i wonder if there's another way to do this with standard libraries
> or .. built-ins.
> if it's not, i'd like the list objects to have partition method


I've oft collected partitions in a dict, so I'll suggest the
generalization:

    def partition(target, predicate):
        result = {}
        for item in target:
            result.setdefault(predicate(item), []).append(item)
        return result


> true, false = [1,2,3,4].partition(lambda x: x >1)
>
> print true, false
> [2,3,4]   [1]

With my version you'd get:
{False: [1], True: [2, 3, 4]}


--
--Bryan



More information about the Python-list mailing list