Кто-нибудь знает о функции / идиоме (на любом языке), которая принимает набор и возвращает два или более подмножества, определенных одним или несколькими предикатами?
Это легко сделать в императивестиль, например:
a = b = []
for x in range(10):
if even(x):
a.append(x)
else:
b.append(x)
или чуть лучше:
[even(x) and a.append(x) or b.append(x) for x in range(10)]
Так как понимание набора возвращает один список, основанный на одном предикате (и это фактически просто карта), я думаю, что следуетбыть чем-то, что разбивает входные данные на 2 или более бинов на основе либо двоичного предиката, либо нескольких предикатов.
Самый подходящий синтаксис, который я могу придумать:
>> def partition(iterable, *functions):
>> return [filter(f,iterable) for f in functions]
>> partition(range(10), lambda x: bool(x%2), lambda x: x == 2)
[[1, 3, 5, 7, 9], [2]]