Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python - Minimum of a List of Instance Variables

Tags:

python

list

min

I'm new to Python and I really love the min function.

>>>min([1,3,15])
0

But what if I have a list of instances, and they all have a variable named number?

class Instance():
    def __init__(self, number):
        self.number = number

i1 = Instance(1)
i2 = Instance(3)
i3 = Instance(15)
iList = [i1,i2,i3]

Do I really have to something like

lowestI = iList[0].number
for i in iList:
    if lowestI > iList[i].number: lowestI = iList[i].number
print lowestI

Can't I use min in a nice pythonic way?

like image 503
DizzyDoo Avatar asked Nov 27 '22 10:11

DizzyDoo


1 Answers

The OOP way would be to implement __lt__:

class Instance():
    def __init__(self, number):
        self.number = number

    def __lt__(self, other):
        return self.number < other.number
        # now min(iList) just works

Another way is

imin = min(iList, key=lambda x:x.number)

Functions like sort, min, max all take a key argument. You give a function that takes an item and returns whatever should stand for this item when comparing it.

like image 146
Jochen Ritzel Avatar answered Dec 05 '22 14:12

Jochen Ritzel