在对象列表中选择具有max属性的对象

时间:2019-11-28 04:44:43

标签: python list-comprehension

我有一个“节点”列表,我试图从该列表中选择具有最大值的节点。以下代码实现了此目的,但我认为可以用一种更为优雅的方式来完成。有没有一种很好的方法可以解决我所缺少的列表理解?预先感谢!

示例代码:

maxVal = 0
for node in self.nodes:
    if node.val > maxVal:
        maxVal = node.val
        self.maxValNode = node
self.maxVal = self.maxValNode.val

1 个答案:

答案 0 :(得分:2)

The max function可以使用key参数来确定如何比较项目。

因此,简单的self.maxValNode = max(self.nodes, key=lambda node: node.val)执行相同的工作(除了最后一行,您将原样保留该行)。为了提高速度(并避免不必要的lambda,这是我的宠儿),请事先导入operator模块,以允许:

from operator import attrgetter   # Top of file

self.maxValNode = max(self.nodes, key=attrgetter('val'))