4

私は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

min素敵なpythonicな方法で使用できませんか?

4

4 に答える 4

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引数を取ります。項目を受け取り、それを比較するときにこの項目を表すものを返す関数を指定します。

于 2010-09-01T20:18:40.807 に答える
10
from operator import attrgetter
min( iList, key = attrgetter( "number" ) )

同じkey議論はsort、Pythonicallyにdecorate-sort-undecorateイディオムを実装するためにも機能します。

于 2010-09-01T20:19:51.693 に答える
5

ジェネレータ構文:

min(i.number for i in iList)

key働き:

min(iList, key=lambda i: i.number)
于 2010-09-01T20:22:07.520 に答える
1
min(iList, key=lambda inst: inst.number)
于 2010-09-01T20:20:33.590 に答える