我正在尝试过滤返回特定属性列表的对象。看看我尝试过的东西:
class Foo:
def __init__(self,a,b):
self.a = a
self.b = b
x = Foo(1,2)
y = Foo(1,3)
z = Foo(2,4)
result = filter(lambda f: f.b if f.a == 1 else None, [x,y,z])
print(list(result))
我期待一个像[2, 3]
这样的列表,但它会返回一个foo
个对象的列表。有没有办法只使用filter
其他功能?例如,我想避免使用map
和filter
。
答案 0 :(得分:4)
您可以使用列表理解
result = [i.b for i in [x,y,z] if i.a == 1]
使用filter
需要两个步骤:一个用于过滤掉i.a != 1
的对象,第二个用于从每个对象中提取.b
(这需要map
})。