gpt4 book ai didi

python - 在列表中查找离今天最近的日期

转载 作者:太空宇宙 更新时间:2023-11-04 09:56:38 25 4
gpt4 key购买 nike

我的目标是从列表中获取下一个最接近今天的日期( future ,而不是过去)。为简单起见,列表(格式为例如 2017-01-31YYYY-MM-DD)是本赛季的每场足球比赛,我正在尝试创建一个脚本,部分找到“下一场”足球比赛。

我在互联网和 Stack Overflow 上搜索了答案并找到了 promising post ,但是提供的解决方案使用不同的格式,当我尝试根据我的情况对其进行定制时,它会引发异常。

我的逻辑包括解析 RSS 提要,因此我将改为提供原始列表。考虑到这一点,我的简化代码如下:

today = str(datetime.date.today())
print(today)

scheduledatelist = ['2017-09-01', '2017-09-09', '2017-09-16', '2017-09-23', '2017-09-30', '2017-10-07', '2017-10-14', '2017-10-21', '2017-10-27', '2017-11-11', '2017-11-18', '2017-11-25']
scheduledatelist = list(reversed(scheduledatelist)) #purpose: to have earliest dates first

这是我尝试改编上一篇文章的解决方案(我不太精通函数式编程,所以我可能不会正确改编它):

get_datetime = lambda s: datetime.datetime.strptime(s, "%Y-%m-%d")
base = get_datetime(today)
later = filter(lambda d: today(d[0]) > today, scheduledatelist)
closest_date = min(later, key = lambda d: today(d[0]))
print(closest_date)

无论我的尝试如何(这在我的情况下可能不是最好的,因为它改变了格式并且我需要最终值仍然是 YYYY-MM-DD),有没有更简单的方法这样做?我需要下一场比赛(最接近今天)的值(value),因为它将继续在我的逻辑中使用。所以回顾一下,我如何才能在我的列表中找到最近的日期,展望 future ,从今天开始。感谢您的帮助!

最佳答案

你可以这样做:

min(scheduledatelist, key=lambda s: 
datetime.datetime.strptime(s, "%Y-%m-%d").date()-datetime.date.today())

对于离今天最近的单个日期。

您可以使用相同的函数按距今天的距离排序:

sorted(scheduledatelist, key=lambda s: 
datetime.datetime.strptime(s, "%Y-%m-%d").date()-datetime.date.today())

从今天起,返回列表的距离会越来越远。如果日期早于或晚于今天,则有效。

如果您只需要 future 的日期,请过滤掉过去的日期。由于日期字符串在 ISO 8601 中格式,你可以在词法上进行比较:

min([d for d in scheduledatelist if d>str(datetime.date.today())], key=lambda s: 
datetime.datetime.strptime(s, "%Y-%m-%d").date()-datetime.date.today())

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com