4

我是 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

我不能min以一种很好的pythonic方式使用吗?

4

4 回答 4

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)

sort, min, maxall 一样的函数都有一个key参数。您提供一个函数,该函数接受一个项目并在比较它时返回该项目应代表的任何内容。

于 2010-09-01T20:18:40.807 回答
10
from operator import attrgetter
min( iList, key = attrgetter( "number" ) )

同样的key论点也适用于sort, 以 Python 方式实现 decorate-sort-undecorate 习惯用法。

于 2010-09-01T20:19:51.693 回答
5

生成器语法:

min(i.number for i in iList)

key功能:

min(iList, key=lambda i: i.number)
于 2010-09-01T20:22:07.520 回答
1
min(iList, key=lambda inst: inst.number)
于 2010-09-01T20:20:33.590 回答