确定n个元素列表的最小值

cca*_*erg 4 python algorithm

我在开发算法以确定n个元素列表的最小值时遇到了一些麻烦.找不到长度为n的数组的最小值并非如此,这很简单:

min = A[0]
for i in range(1, len(A)):
    if min > A[i]: min = A[i]
print min
Run Code Online (Sandbox Code Playgroud)

但我的列表包含对象:

class Object:
    def __init__(self, somelist):
        self.classification = somelist[0] # String
        self.type           = somelist[1] # String
        self.first          = somelist[2] # Integer
        self.last           = somelist[3] # Integer
Run Code Online (Sandbox Code Playgroud)

而对于同样的'分类| 类型'对象我有m个元素,我想找到相同'分类|的最小元素 通过比较第一个和最后一个之间的差异来输入'.

例:

obj1 = Object(['A', 'x', 4, 17])
obj2 = Object(['A', 'y', 5, 20])
obj3 = Object(['B', 'z', 10, 27])
obj4 = Object(['B', 'z', 2, 15])
obj5 = Object(['B', 'z', 20, 40])
obj6 = Object(['A', 'x', 6, 10])
obj7 = Object(['A', 'x', 2, 9])
list = [obj1, obj2, obj3, obj4, obj5, obj6, obj7]
Run Code Online (Sandbox Code Playgroud)

所以我需要一个算法来确定列表的最小值:

A | x - >对象(['A','x',6,10])

B | z - >对象(['B','z',2,15])

A | y - >对象(['A','y',5,20])

谢谢!

Sil*_*ost 7

filtered = [obj for obj in lst if obj.classification == 'A' and obj.type = 'x']
min(filtered, key=lambda x: x.last - x.first)
Run Code Online (Sandbox Code Playgroud)

注意:不要为变量命名list:它内置阴影.

  • 在实践中,我会考虑将`filtered`作为生成器. (3认同)