我是Python的新手,我非常喜欢这个min功能.
>>>min([1,3,15])
0
Run Code Online (Sandbox Code Playgroud)
但是,如果我有一个实例列表,并且它们都有一个名为number?的变量怎么办?
class Instance():
def __init__(self, number):
self.number = number
i1 = Instance(1)
i2 = Instance(3)
i3 = Instance(15)
iList = [i1,i2,i3]
Run Code Online (Sandbox Code Playgroud)
我真的需要这样的东西吗?
lowestI = iList[0].number
for i in iList:
if lowestI > iList[i].number: lowestI = iList[i].number
print lowestI
Run Code Online (Sandbox Code Playgroud)
我不能min以一种漂亮的pythonic方式使用吗?
Joc*_*zel 13
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
Run Code Online (Sandbox Code Playgroud)
另一种方式是
imin = min(iList, key=lambda x:x.number)
像sort, min, max所有人一样的功能都是key争论的 你给出一个函数,它接受一个项目,并在比较它时返回该项目应该代表的东西.
Kat*_*iel 10
from operator import attrgetter
min( iList, key = attrgetter( "number" ) )
Run Code Online (Sandbox Code Playgroud)
同样的key论证也适用于sort,用Python来实现decorate-sort-undecorate习语.
生成器语法:
min(i.number for i in iList)
Run Code Online (Sandbox Code Playgroud)
key 功能:
min(iList, key=lambda i: i.number)
Run Code Online (Sandbox Code Playgroud)