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

Krister Svanlund krister.svanlund at gmail.com
Tue Apr 20 06:29:43 CEST 2010


On Tue, Apr 20, 2010 at 3:40 AM, segunai <osk.iru at gmail.com> wrote:
> On 4월20일, 오전10시16분, Chris Rebert <c... at rebertia.com> wrote:
>> On Mon, Apr 19, 2010 at 6:00 PM, knifenomad <knifeno... at gmail.com> 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 like
>> > string module has.
>>
>> (A) str.partition() has a /completely/ different meaning from your partition()
>> (B) You'd probably have better luck getting it added to the itertools
>> module since the concept is applicable to all iterables.
>> [http://docs.python.org/library/itertools.html]
>>
>> Cheers,
>> Chris
>> --http://blog.rebertia.com
>
> yep, my mistake. i shouldn't have compared it to string's partition().
> i just wanted that convenience string.partition() has as a built-in.
> anyway, thanks for itertools. :)
> --
> http://mail.python.org/mailman/listinfo/python-list
>

The way I would do it is probably apply filter to the list:
>>> def f(x): return x % 2 != 0 and x % 3 != 0
...
>>> filter(f, range(2, 25))
[5, 7, 11, 13, 17, 19, 23]



More information about the Python-list mailing list