max-对象属性的函数

Seb*_*erk 1 python list max

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

class Foo():
    def __init__(self, value):
        self.value = value
Run Code Online (Sandbox Code Playgroud)

现在有一个Foos 列表:

foos = [Foo(2), Foo(3), Foo(1)]
Run Code Online (Sandbox Code Playgroud)

我希望有最大价值这一名单.

我可以max在列表上使用:

max_value = max([foo.value for foo in foos])
Run Code Online (Sandbox Code Playgroud)

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

max_value = max(foos, key=lambda foo: foo.value).value
Run Code Online (Sandbox Code Playgroud)

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

我还可以定义__eq__,__le__里面的功能Foo,但是这将限制使用max特定值,我不能使用max一个以上的属性.

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

Sto*_*ica 6

使用生成器表达式稍微好一些:

max_value = max(foo.value for foo in foos)
# instead of:
# max_value = max([foo.value for foo in foos])
Run Code Online (Sandbox Code Playgroud)

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