基本上我想要做的是取兩個對象列表並根據一些測試將它們分成兩個列表,取決於結果是True
還是False
。 filter()
的作用是排序,除了不是確定它是否處於進入或退出狀態,而是確定要去哪個列表/迭代器。我做了使用itertools.groupby()
這樣的嘗試:pythonic方式正好分爲兩個組的列表
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()
(或等效的列表理解),並通過兩遍,但有什麼樂趣呢?