Как использовать min () только с первым столбцом двумерного списка - PullRequest
1 голос
/ 30 сентября 2019

У меня есть 2-мерный список, в котором каждая запись имеет метку времени (int) и второе значение, которое может быть int, строкой или объектом.

Я использую функцию min (), чтобы получитьзапись с самой низкой отметкой времени:

a = [[2, "start C"],
     [6, 2484],
     [15, "finish C"]]

print(min(a))

Вывод:

[2, 'start C']

При одинаковых минимальных отметках времени min () будет сравнивать второй столбец этих элементов.

Это работает только до тех пор, пока второй столбец имеет сопоставимые значения:

a = [[2, "start C"],
     [2, "start B"],
     [15, "finish C"]]

print(min(a))

Вывод:

[2, 'start B']

Если второй столбец содержит разные типы данных, он выдает ошибку:

a = [[2, "start C"],
     [2, 2484],
     [15, "finish C"]]

print(min(a))

Вывод:

TypeError: '<' not supported between instances of 'int' and 'str'

Как разрешить только первый столбец проверить на минимум? Когда есть идентичные метки времени, он должен просто вернуть первый встреченный элемент.

Ответы [ 2 ]

4 голосов
/ 30 сентября 2019

Вы можете передать ключ сравнения

min(my_list, key=lambda x: x[0])

По умолчанию python использует первый элемент для сравнения, а в случае связи второй - как прерыватель связи (и т. Д.), ПоэтомуВы получаете ошибку.

3 голосов
/ 30 сентября 2019

min принимает аргумент key, который можно использовать для получения ожидаемого поведения:

from operator import itemgetter

a = [[2, "start C"],
     [6, 2484],
     [15, "finish C"]]

min(a, key=itemgetter(0))
# [2, 'start C']

, что эквивалентно нарезке внутренних списков с помощью пользовательской лямбда-функции, как в решении @ blue_note, но обычно несколько быстрее (хотя в основном это привычка быть более удобной при необходимости извлекать несколько предметов, как объяснено здесь ):

min(my_list, key=lambda x: x[0])

Используя itemgetter,только первый элемент в каждом внутреннем списке будет выбран для целей упорядочения, а затем будет вычислен минимум среди этого подмножества

...