2 回答
TA贡献2012条经验 获得超12个赞
这里不需要完整排序。您可以使用heap.nsmallest后跟列表理解:
from heapq import nsmallest
from operator import itemgetter
list_a = [['A', 12.1], ['B', 15.6], ['C', 9.8], ['D', 12.1], ['F', 96.3]]
second_largest_val = nsmallest(2, map(itemgetter(1), list_a))[1]
res = [key for key, val in list_a if val == second_largest_val]
# ['A', 'D']
TA贡献1909条经验 获得超7个赞
您可以使用以下条件列表理解:
list_a = [['A', 12.1], ['B', 15.6], ['C', 9.8], ['D', 12.1], ['F', 96.3]]
sorted_a = sorted(list_a, key=lambda x: x[1])
[x for x, y in sorted_a if y == sorted_a[1][1]]
# ['A', 'D']
然而,这确实检查float对象的相等性,这并不理想。因此,您可能希望使用math.isclosePython >= 3.5 中可用的方法:
from math import isclose
[x for x, y in sorted_a if isclose(y, sorted_a[1][1])]
# ['A', 'D']
添加回答
举报