可能重复:
python equivalent of filter() getting two output lists (i.e. partition of a list)
是否有任何内置函数或python标准库中的某些模块,它模拟来自Ruby的Enumerable.partition
行为并且只迭代一个对象一次以获得基于传递的谓词函数的两个列表/元组?< / p>
答案 0 :(得分:0)
从this question无耻地偷走 - 您可以使用tee
中的itertools
功能:
from itertools import tee
def split_on_condition(seq, condition):
l1,l2 = tee((condition(item),item) for item in seq)
return (i for p, i in l1 if p), (i for p, i in l2 if not p)