在Python中查找列表中最近的5个日期

时间:2018-05-18 11:10:57

标签: python list sorting datetime

我有一个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 :(得分:6)

您可以将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)]