我是新来的蟒蛇,我真的很喜欢的 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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top