Python—实例变量列表的最小值
我是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] 我真的需要做点什么吗
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
;)<代码>键优于生成器,因为它保留了对实例的引用。