python - 在日期列表中查找最近的过去日期
问题描述
我试图在日期列表中找到与当前日期最近的过去日期。我发现了几个在列表中搜索最近日期的示例,但所有这些都允许选择返回进一步的日期。
日期时间列表具有以下形式:
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)
但这会返回与当前日期最接近的日期,这是返回未来最接近日期的一半时间。我也一直在研究实现 numpy searchsorted 函数,但这似乎总是返回最近的未来日期,无论我为 side 参数选择“right”还是“left”,方式如下:
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
s 将是一种方法:
from datetime import datetime
now = datetime.now()
min(datelist, key=lambda x: (x>now, abs(x-now)) )
输出:
datetime.datetime(2020, 1, 31, 0, 0)
推荐阅读
- jinja2 - 如何用等号加入并在Jinja2中为整数添加单引号
- java - 等待 Cloud Firestore 任务结果
- sql - 如何在 SQL 插入语句中执行三元运算
- scripting - 如何使我的脚本同时适用于 Macd 和 ema 的买入和卖出指标作为 pine 脚本中的条件
- python - Streamlit 浏览器应用程序无法从 Sagemaker 终端打开
- javascript - 如何防止在javascript中刷新浏览器页面
- java - 由于异步任务,Android Studio 中的 Looper 很慢
- ios - 如何修复 react-native 中显示的错误?
- javascript - 如何使用 react-router-dom 跟踪 react-ga 事件
- c - 获取远程套接字 C / C++ Unix 的 IPv6 地址