Python - 实例变量列表的最小值
我刚开始学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)
像 sort
、min
和 max
这样的函数都可以接收一个 key
参数。你需要提供一个函数,这个函数接收一个项目并返回在比较时应该代表这个项目的值。