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

Python—实例变量列表的最小值,python,list,min,Python,List,Min,我是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] 我真的需要做点什么吗

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

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

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

    def __lt__(self, other):
        return self.number < other.number
        # now min(iList) just works
class实例():
定义初始化(自身,编号):
self.number=number
定义(自身、其他):
返回self.number
另一种方法是

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

像排序、最小值、最大值这样的函数都使用一个
参数。给出一个函数,该函数接受一个项,并在比较该项时返回该项应代表的内容

from operator import attrgetter
min( iList, key = attrgetter( "number" ) )
相同的
参数也适用于
排序
,用于以Pythonically方式实现修饰排序-非修饰惯用法。

生成器语法:

min(iList, key=lambda inst: inst.number)
min(i.number for i in iList)
功能:

min(iList, key=lambda i: i.number)

min(iList,key=attrgetter(“number”))
attrgetter和itemgetter-rock-使用它们可以消除很多lambda函数。它们比lambda和IMHO更快,更易于阅读。您的
min
功能必须被破坏
min([1,3,15])
给我
1
;)<代码>键
优于生成器,因为它保留了对实例的引用。