基本的に私がやりたいことは、オブジェクトの 2 つのリストを取得し、いくつかのテストに基づいて、結果が か かによって 2 つのリストに分割すること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
これで仕事は完了ですが、もっと明確で簡単な方法があるかどうか疑問に思っています。(または同等のリスト内包表記) を使用して 2 つのパスで実行できることに気付きfilter()
ましたが、それは楽しいことでしょうか?