python - 在日期列表中查找最近的过去日期

标签 python numpy sorting datetime

我试图在日期列表中找到最接近当前日期的过去日期。我发现了几个在列表中搜索最近日期的示例,但所有这些都允许选择返回更远的日期。

日期时间列表具有以下形式:

datelist =
[datetime.datetime(2019, 12, 31, 0, 0),
 datetime.datetime(2020, 1, 10, 0, 0),
 datetime.datetime(2020, 1, 20, 0, 0),
 datetime.datetime(2020, 1, 31, 0, 0),
 datetime.datetime(2020, 2, 10, 0, 0),
 datetime.datetime(2020, 2, 20, 0, 0)]

到目前为止,我一直在实现以下功能来查找最近的日期;

def nearest_ind(items, pivot):
    '''
    Find the nearest value to the given value (the pivot) in a list.
    '''
    time_diff = np.abs([date - pivot for date in items])
    return time_diff.argmin(0)

但这会返回最接近当前日期的日期,一半的时间会返回 future 最接近的日期。我也一直在考虑实现 numpy searchsorted 函数,但这似乎总是返回最近的 future 日期,无论我是通过以下方式为 side 参数选择“右”还是“左”:

np.searchsorted(datelist, datetime.datetime.now(), side='right')
np.searchsorted(datelist, datetime.datetime.now(), side='left')

在任一实例中,numpy searchsorted 函数返回(如果我今天运行它,2020 年 2 月 7 日)4(对应于 datetime.datetime(2020, 2, 10, 0, 0))。有谁知道确保始终返回过去最近日期的方法吗?

最佳答案

min 与两个 key 一起使用是一种方法:

from datetime import datetime

now = datetime.now()
min(datelist, key=lambda x: (x>now, abs(x-now)) )

输出:

datetime.datetime(2020, 1, 31, 0, 0)

关于python - 在日期列表中查找最近的过去日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60109868/

相关文章:

python - 列出 Google App Engine 数据存储中的所有实体时出现 AttributeError

python - python中3D曲线的保形分段三次插值

javascript - 我需要解释 JS 如何处理排序?

python - 使用最小元素比较对 5 个元素进行排序

python - protobuf数据解析返回错误结果

python - 在Conda环境.yaml中设置channel_priority

python - 如何在Python中导入Scipy和Numpy?

php - 按时间顺序对 MySQL 记录进行排序?

python - ctypes 将 c_uint64 转换为 c_char_p

python - 如何使用一些常量片段在 Python 中进行分段线性拟合?