我有一个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个日期的清单。
我知道我可以找到最近的日期,并在此任意一侧取两个列表元素(因为日期列表已排序)但是当最近的日期可能是第一个或最后一个元素(即之前或之后没有项目)时这很难, 分别)。
答案 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)]