我想知道,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方式获得最大值吗?
使用生成器表达式稍微好一些:
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,不确定它是否能比这更好.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |