>>> lst
[('BFD', 0), ('NORTHLANDER', 3), ('HP', 23), ('VOLT', 3)]
>>> min([x for x in lst if x[1]!=0], key=lambda x: x[1])
('NORTHLANDER', 3)
>>>
这里 min() 只返回一组。它实际上应该返回:
[('NORTHLANDER', 3), ('VOLT', 3)]
是否有任何内置函数可以达到这种效果?
请您参考如下方法:
这是一个简单的两步解决方案,首先计算最小值,然后收集所有具有最小值的元组,因此请编写您自己的函数来执行此操作。这是一个相当专业的操作,不是通用 min() 函数所期望的。
查找具有最小值的元素:
>>> lstm = min([x for x in lst if x[1] > 0], key = lambda x: x[1])
>>> lstm
('NORTHLANDER', 3)
然后形成一个新列表,从 list 中获取元素,其中的值是 lstm 的值:
>>> [y for y in lst if y[1] == lstm[1]]
[('NORTHLANDER', 3), ('VOLT', 3)]
