题
我是新来的蟒蛇,我真的很喜欢的 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
在一个不错的功能已大大增强的方式?
解决方案
面向对象的方式将执行 __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
参数。你给一个功能,需要一个项目,并返回的任何应当为这个项目时,比较。
其他提示
from operator import attrgetter
min( iList, key = attrgetter( "number" ) )
相同的 key
论点也适用 sort
, 为落实的装饰-有点-undecorate语Pythonically.
发电机的语法:
min(i.number for i in iList)
key
功能:
min(iList, key=lambda i: i.number)
min(iList, key=lambda inst: inst.number)
不隶属于 StackOverflow