述語をもとにリストを2つに分ける関数を書いてみた
30分プログラム、その767。述語をもとにリストを2つに分ける関数を書いてみた。
例えば、整数のリストxsにたいして
partition(lambda x : x % 2 == 0, xs)
とやってやると、偶数のリストと奇数のリストに分割してくれる。
使い方
print partition(lambda x : x % 2 == 0, range(0,10)) # => ([0, 2, 4, 6, 8], [1, 3, 5, 7, 9])
ソースコード
#! /usr/bin/python # -*- mode:python; coding:utf-8 -*- def partition1(p, xs): return (filter(p,xs), filter(lambda x: not p(x),xs)) def partition2(p, xs): ys = [] zs = [] for x in xs: if p(x): ys.append(x) else: zs.append(x) return (ys,zs) def partition(p, xs): def f(accum, x): if p(x): return (accum[0] + [x], accum[1]) else: return (accum[0], accum[1] + [x]) return reduce(f,xs,([],[])) print partition(lambda x : x % 2 == 0, range(0,10))