我想知道,在关于特定属性的对象列表中使用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方式获得最大值吗?
答案 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,不确定它是否能比这更好。