Python - 实例变量列表的最小值

4 投票
4 回答
3117 浏览
提问于 2025-04-16 03:36

我刚开始学Python,真的很喜欢这个min函数。

>>>min([1,3,15])
0

但是如果我有一个实例的列表,而这些实例都有一个叫number的变量呢?

class Instance():
    def __init__(self, number):
        self.number = number

i1 = Instance(1)
i2 = Instance(3)
i3 = Instance(15)
iList = [i1,i2,i3]

我真的需要像这样做吗

lowestI = iList[0].number
for i in iList:
    if lowestI > iList[i].number: lowestI = iList[i].number
print lowestI

难道我不能用一种更优雅的Python方式来使用min吗?

4 个回答

5

生成器语法:

min(i.number for i in iList)

key 函数:

min(iList, key=lambda i: i.number)
10
from operator import attrgetter
min( iList, key = attrgetter( "number" ) )

同样的 key 参数也可以用在 sort 函数上,这样可以用一种很Python的方式来实现装饰-排序-去装饰的技巧。

14

面向对象编程(OOP)的方法是实现 __lt__ 这个功能:

class Instance():
    def __init__(self, number):
        self.number = number

    def __lt__(self, other):
        return self.number < other.number
        # now min(iList) just works

还有另一种方法是

imin = min(iList, key=lambda x:x.number)

sortminmax 这样的函数都可以接收一个 key 参数。你需要提供一个函数,这个函数接收一个项目并返回在比较时应该代表这个项目的值。

撰写回答