質問
私は 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)
所属していません StackOverflow