Python中日期对象的拼接列表

时间:2014-05-30 20:16:02

标签: python slice

是否有一种简单的方法来拼接日期对象列表:

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 :(得分:5)

假设您有一个包含sortedDates对象的列表datetime,以及用于定义边界的2个datetime minDmaxD个对象:

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))]