Найти ближайшие 5 дат из списка в Python - PullRequest
0 голосов
/ 18 мая 2018

У меня есть список datetime объектов и я хочу найти ближайшие 5 (или 6 или 7 и т. Д.) Дат, которые соответствуют моей указанной дате.

Например:

datelist
>>>> [datetime.date(2017, 3, 4), datetime.date(2017, 3, 6), datetime.date(2017, 3, 12), datetime.date(2017, 3, 27), datetime.date(2017, 3, 27), datetime.date(2017, 3, 29), datetime.date(2017, 3, 29), datetime.date(2017, 4, 2), datetime.date(2017, 4, 4)]

Если я наберу:

my_date = datetime.date(2017, 4, 2)
nearest_list = find_nearest(datelist, my_date)  # Functionality I want!

print nearest_list
>>>> [datetime.date(2017, 3, 27), datetime.date(2017, 3, 29), datetime.date(2017, 3, 29), datetime.date(2017, 4, 2), datetime.date(2017, 4, 4)]

Я получу список ближайших 5 дат.

Я знаючто я мог бы найти ближайшую дату и взять два элемента списка по обе стороны от этого (так как список дат отсортирован), но это трудно, когда ближайшая дата может быть первым или последним элементом (т.е. никаких элементов до или после, соответственно).

1 Ответ

0 голосов
/ 18 мая 2018

Вы можете использовать sorted с пользовательской функцией:

res = sorted(datelist, key=lambda x: abs(x-my_date))[:5]

[datetime.date(2017, 4, 2),
 datetime.date(2017, 4, 4),
 datetime.date(2017, 3, 29),
 datetime.date(2017, 3, 29),
 datetime.date(2017, 3, 27)]
...