max-对象属性的函数

时间:2014-08-15 07:02:12

标签: python list max

我想知道,在关于特定属性的对象列表中使用max的最pythonic方法可能是什么。假设有这个类:

class Foo():
    def __init__(self, value):
        self.value = value

现在有一个Foo s列表:

foos = [Foo(2), Foo(3), Foo(1)]

我想拥有此列表的最大

我可以在列表中使用max

max_value = max([foo.value for foo in foos])

这总是首先构建一个列表(可能会降低巨大列表的性能),所以我想使用key参数:

max_value = max(foos, key=lambda foo: foo.value).value

这看起来有点难看,因为我没有得到属性,而是对象。

我还可以在__eq__中定义__le__Foo函数,但这会限制max对特定值的使用,我无法使用{{ 1}}用于多个属性。

还有另一种方法,以一种漂亮的pythonic方式获得最大值吗?

1 个答案:

答案 0 :(得分:6)

使用generator expression稍微好一些:

max_value = max(foo.value for foo in foos)
# instead of:
# max_value = max([foo.value for foo in foos])

这是很多Pythonic,不确定它是否能比这更好。