过滤器对象返回一个属性

Joã*_*ulo 1 python filter

我正在尝试过滤返回特定属性列表的对象。看看我试过的:

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))
Run Code Online (Sandbox Code Playgroud)

我期待这样的列表[2, 3],但它返回给我一个foo对象列表。有没有办法只使用filter其他功能来做到这一点?例如,我想避免使用mapfilter

Cor*_*mer 5

您可以使用列表理解

result = [i.b for i in [x,y,z] if i.a == 1]
Run Code Online (Sandbox Code Playgroud)

使用filter它需要两个步骤:一个是过滤掉对象所在的位置i.a != 1,第二个是.b从每个对象中拉出(这需要map)。