Доступ к первому элементу отсортированного вложенного списка для второго наименьшего второго элемента - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть вложенный список ссылок:

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

Я успешно отсортировал список, используя sorted(list_a), согласно вторым элементам подсписков. Как получить выходные данные A и D (первые элементы списка со вторыми наименьшими вторыми элементами)?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Полная сортировка здесь не нужна. Вы можете использовать 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']
0 голосов
/ 02 ноября 2018

Вы можете использовать следующие условные списки :

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.isclose, который доступен в Python> = 3.5:

from math import isclose
[x for x, y in sorted_a if isclose(y, sorted_a[1][1])]
# ['A', 'D']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...