在Python中拼接日期对象列表
有没有简单的方法可以从一个日期对象的列表中提取部分内容:
spliced = sortedDates[startDate:endDate]
print spliced
还是说这需要用到枚举?
举个例子:
sortedDates = [July 1 2012, July 2 2012, July 3 2012, July 4, 2012]
spliced = sortedDates[July 2 2012:July 4 2012]
3 个回答
0
pandas
在处理日期方面非常出色。
import pandas as pd
from datetime import datetime
dr = pd.date_range('2012-07-01', '2012-08-01')
dr[(dr >= datetime(2012,7,4)) & (dr <= datetime(2012,7,8))]
0
你可以通过列表推导式来创建一系列的日期:
start_date = datetime.datetime(2014, 1, 1)
end_date = datetime.datetime(2014, 1, 5)
nb_days = (end_date - start_date).days + 1 # + 1 because range is exclusive
splice = [start_date + datetime.timedelta(days=x) for x in range(nb_days)]
举个例子:
>>> [start_date + datetime.timedelta(days=x) for x in range(0, nb_days)]
[datetime.datetime(2014, 1, 1, 0, 0), datetime.datetime(2014, 1, 2, 0, 0),
datetime.datetime(2014, 1, 3, 0, 0), datetime.datetime(2014, 1, 4, 0, 0),
datetime.datetime(2014, 1, 5, 0, 0)]
如果你想从已有的日期列表中返回一个子列表,你也可以再次使用列表推导式来构建:
splice = [x for x in original_list if start_date < x < end_date]
5
假设你有一个列表 sortedDates
,里面存放着 datetime
对象,还有两个 datetime
对象 minD
和 maxD
,用来定义你的范围:
filtered = [d for d in sortedDates if minD < d < maxD]
或者,更有效的方法是利用这个列表已经排好序的特点,使用二分查找:
from bisect import bisect_left, bisect_right
filtered = sortedDates[bisect_right(sortedDates, minD):bisect_left(sortedDates, maxD)]