基本上我想要做的是获取两个对象列表并根据一些测试并将它们分为两个列表,具体取决于结果是True
还是False
. filter()
除了确定它是进还是出之外,它决定了要转到哪个列表/迭代器,而不是确定它是做什么的。我已经尝试使用itertools.groupby()
:
import random
from itertools import groupby
class FooObject(object):
def __init__(self):
self.key = random.choice((True, False))
def __repr__(self):
return '<Foo: %s>' % self.key
foos = [FooObject() for _ in range(10)]
left, right = [], []
groups = groupby(sorted(foos, key=lambda o: o.key), lambda o: o.key)
for k, group in groups:
if k:
right = list(group)
else:
left = list(group)
print left
print right
这可以完成工作,但只是想知道是否有更清晰/更简单的方法。我意识到我可以使用filter()
(或等效的列表理解)并在两遍中完成,但这有什么乐趣呢?