尝试这个:
def partition(pred, iterable): trues = [] falses = [] for item in iterable: if pred(item): trues.append(item) else: falses.append(item) return trues, falses
用法:
>>> trues, falses = partition(lambda x: x > 10, [1,4,12,7,42])>>> trues[12, 42]>>> falses[1, 4, 7]
itertools配方中还有一个实现建议:
from itertools import filterfalse, teedef partition(pred, iterable): 'Use a predicate to partition entries into false entries and true entries' # partition(is_odd, range(10)) --> 0 2 4 6 8 and 1 3 5 7 9 t1, t2 = tee(iterable) return filterfalse(pred, t1), filter(pred, t2)
该食谱来自Python 3.x文档。在Python 2.x
filterfalse中称为
ifilterfalse。



