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

tda*_*tda 2 python sorting datetime list

我有一个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)]
Run Code Online (Sandbox Code Playgroud)

如果我输入:

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)]
Run Code Online (Sandbox Code Playgroud)

我应该收到最近5个日期的清单.

我知道我可以找到最近的日期并在其中任意一侧取两个列表元素(因为日期列表已排序)但是当最近的日期可能是第一个或最后一个元素(即分别在之前或之后没有项目)时这很难.

jpp*_*jpp 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)]
Run Code Online (Sandbox Code Playgroud)