Страницы

Поиск по вопросам

понедельник, 25 марта 2019 г.

Как удалить повторяющиеся элементы из двумерного списка?

list = [['03:30', 70.0], ['03:30', 135.0], ['03:30', 200.0], ['03:30', 280.0], ['04:00', 360.0], ['04:00', 430.0], ['04:30', 473.0], ['04:30', 573.0]]
Как удалить элементы с одинаковым временем и оставить с большим числом, чтобы получилось:
list = [['03:30', 280.0], ['04:00', 430.0], ['04:30', 573.0]]


Ответ

In [49]: from itertools import groupby
In [50]: res = [max(g) for _,g in groupby(lst, lambda x: x[0])]
In [51]: res Out[51]: [['03:30', 280.0], ['04:00', 430.0], ['04:30', 573.0]]
можно явно указать ключ для функции max()
In [53]: res = [max(g, key=lambda x: x[1]) for _,g in groupby(lst, lambda x: x[0])]
In [54]: res Out[54]: [['03:30', 280.0], ['04:00', 430.0], ['04:30', 573.0]]
Данный код группирует список списков по первому элементу:
In [57]: for k,g in groupby(lst, lambda x: x[0]): ...: print(k, list(g)) ...: 03:30 [['03:30', 70.0], ['03:30', 135.0], ['03:30', 200.0], ['03:30', 280.0]] 04:00 [['04:00', 360.0], ['04:00', 430.0]] 04:30 [['04:30', 473.0], ['04:30', 573.0]]
после этого мы выбираем в каждой группе элемент (список) с максимальным вторым элементом:
In [58]: for k,g in groupby(lst, lambda x: x[0]): ...: print(max(g, key=lambda x: x[1])) ...: ['03:30', 280.0] ['04:00', 430.0] ['04:30', 573.0]

Комментариев нет:

Отправить комментарий