如何在Python中获取最近的上一个日期?
我有一个datetime对象数组,我想找出数组中的哪个元素与给定日期最近(例如如何在Python中获取最近的上一个日期?,python,datetime,lambda,Python,Datetime,Lambda,我有一个datetime对象数组,我想找出数组中的哪个元素与给定日期最近(例如datetime.datetime(2020,11,1)) post显示如何查找最近的绝对日期。如何修改此代码,使其只返回给定日期之前的日期 例如,如果数组中包含元素datetime.datetime(2020,10,10)、datetime.datetime(2020,10,25)和datetime.datetime(2020,11,2),则应返回第二个项,因为它与datetime.datetime(2020,11,
datetime.datetime(2020,11,1)
)
post显示如何查找最近的绝对日期。如何修改此代码,使其只返回给定日期之前的日期
例如,如果数组中包含元素
datetime.datetime(2020,10,10)
、datetime.datetime(2020,10,25)
和datetime.datetime(2020,11,2)
,则应返回第二个项,因为它与datetime.datetime(2020,11,1)
最近。可以用lambda制作这样的东西吗?还是太精细了?因为datetime.datetime
对象可以相互比较,所以可以使用max:
import datetime
dates = (
datetime.datetime(2020,10,10),
datetime.datetime(2020,10,25),
datetime.datetime(2020,11,2)
)
date = datetime.datetime(2020,11,1)
print(max(d for d in dates if d < date))
由于可以相互比较
datetime.datetime
对象,因此可以使用max:
import datetime
dates = (
datetime.datetime(2020,10,10),
datetime.datetime(2020,10,25),
datetime.datetime(2020,11,2)
)
date = datetime.datetime(2020,11,1)
print(max(d for d in dates if d < date))
您只需筛选目标日期之前的日期,并取最大值:
import datetime
dates = [datetime.datetime(2020,10,10), datetime.datetime(2020,10,25), datetime.datetime(2020,11,2)]
target = datetime.datetime(2020,11,1)
res = max(date for date in dates if date < target)
print(res)
#2020-10-25 00:00:00
然后以同样的方式继续,或者在一行中完成:
import datetime
data = [{'start': datetime.datetime(2020,10,10)}, {'start': datetime.datetime(2020,10,25)}, {'start': datetime.datetime(2020,11,2)}]
target = datetime.datetime(2020,11,1)
res = max(d['start'] for d in data if d['start'] < target)
print(res)
#2020-10-25 00:00:00
或者,在不导入itemgetter的情况下,使用lambda作为键:
res = max((d for d in data if d['start'] < target), key=lambda d: d['start'])
res=max((如果d['start']
您只需筛选目标日期之前的日期,并取最大值:
import datetime
dates = [datetime.datetime(2020,10,10), datetime.datetime(2020,10,25), datetime.datetime(2020,11,2)]
target = datetime.datetime(2020,11,1)
res = max(date for date in dates if date < target)
print(res)
#2020-10-25 00:00:00
然后以同样的方式继续,或者在一行中完成:
import datetime
data = [{'start': datetime.datetime(2020,10,10)}, {'start': datetime.datetime(2020,10,25)}, {'start': datetime.datetime(2020,11,2)}]
target = datetime.datetime(2020,11,1)
res = max(d['start'] for d in data if d['start'] < target)
print(res)
#2020-10-25 00:00:00
或者,在不导入itemgetter的情况下,使用lambda作为键:
res = max((d for d in data if d['start'] < target), key=lambda d: d['start'])
res=max((如果d['start']
太棒了!如果我有一个dict列表,例如,[{'start':datetime.datetime(2020,10,10)},{'start':datetime.datetime(2020,10,25)},{'start':datetime.datetime(2020,10,25)},{'start':datetime.datetime(2020,11,2)}]
,我会如何使用?很抱歉造成混乱-我实际上是指提取完整的dict,而不仅仅是日期。例如,返回{'start':datetime.datetime(2020,10,25)}
太棒了!如果我有一个dict列表,例如,[{'start':datetime.datetime(2020,10,10)},{'start':datetime.datetime(2020,10,25)},{'start':datetime.datetime(2020,10,25)},{'start':datetime.datetime(2020,11,2)}]
,我会如何使用?很抱歉造成混乱-我实际上是指提取完整的dict,而不仅仅是日期。例如,要返回{'start':datetime.datetime(2020,10,25)}
如果你真的想要一个lambda,你可以过滤:*\uuuu,最近的=过滤器(lambda t:t
。如果你真的想要一个lambda,你可以过滤:*\uu,最近的=过滤器(lambda t:t
。