質問

私は 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 素敵なパイソン的な方法で?

役に立ちましたか?

解決

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

他のヒント

from operator import attrgetter
min( iList, key = attrgetter( "number" ) )

同じ key 引数も機能します sort, 、decorate-sort-undecorateイディオムをPython的に実装するためのものです。

ジェネレーターの構文:

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