是否有一种简单的方法来拼接日期对象列表:
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]
答案 0 :(得分:5)
假设您有一个包含sortedDates
对象的列表datetime
,以及用于定义边界的2个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)]
答案 1 :(得分: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]
答案 2 :(得分: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))]