访问排序的嵌套列表中的第一个元素以获取第二个最小的第二个元素

时间:2018-11-02 09:07:25

标签: python python-3.x list sorting

我有一个嵌套的链表:

list_a = [[A, 12.1], [B, 15.6], [C, 9.8], [D, 12.1], [F, 96.3]]

根据子列表的第二个元素,我已经使用sorted(list_a)成功地对列表进行了排序。如何获得输出A和D(列表中第二元素第二小的元素)?

2 个答案:

答案 0 :(得分:1)

这里不需要完整的排序。您可以使用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']

答案 1 :(得分:0)

您可以使用以下条件list comprehension

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个对象是否与is not ideal相等。因此,您可能想使用math.isclose,它在Python> = 3.5中可用:

from math import isclose
[x for x, y in sorted_a if isclose(y, sorted_a[1][1])]
# ['A', 'D']