Python min 函数与对象列表
如何使用 key
参数来比较一组对象的某个属性,特别是在使用 min
函数的时候?
举个例子
class SpecialNumber:
def __init__(self, i):
self.number = i
li = [SpecialNumber(1), SpecialNumber(3), SpecialNumber(2)]
4 个回答
16
我会通过重写 __cmp__
来实现这个功能。
class SpecialNumber:
def __init__(self, i):
self.number = i
def __repr__(self):
return '<SpecialNumber(%d)>' % self.number
def __cmp__(self, other):
return cmp(self.number, other.number)
li = [SpecialNumber(1), SpecialNumber(3), SpecialNumber(2)]
print min(li) # <SpecialNumber(1)>
62
这段话的意思是:
min(li, key=lambda x: x.number)
你需要一个函数,这个函数可以接收一个叫做SpecialNumber
的东西,并且返回它里面的元素。
65
这是一个链接,点击可以查看Python的官方文档,里面有关于operator模块的attrgetter的详细说明。
from operator import attrgetter
min_num = min(li,key=attrgetter('number'))
下面是一个示例的互动会话:
>>> li = [SpecialNumber(1), SpecialNumber(3), SpecialNumber(2)]
>>> [i.number for i in li]
[1, 3, 2]
>>> min_num = min(li,key=attrgetter('number'))
>>> print min_num.number
1