我有开始日期列表和结束日期列表。他们被分类...如何将两个日期列表合并为一系列日期间隔?
start_dates = [
datetime.date(2009, 11, 5), datetime.date(2009, 11, 13),
datetime.date(2009, 11, 25), datetime.date(2009, 11, 26),
datetime.date(2009, 12, 4), datetime.date(2009, 12, 7),
datetime.date(2009, 12, 29), datetime.date(2009, 12, 30)]
end_dates = [
datetime.date(2009, 10, 1), datetime.date(2009, 10, 2),
datetime.date(2009, 10, 9), datetime.date(2009, 10, 12),
datetime.date(2009, 11, 4), datetime.date(2009, 12, 14),
datetime.date(2009, 12, 15)]
我们想要一个时间段序列,它使用start_date开始一个句点,一个end_date结束句点。时间段不能重叠:每个周期必须在下一个开始之前结束,也不能从最后一个结束的那一天开始。如果最后有一个start_date没有合适的end_date匹配,则使用None
作为最终结束日期。
因此,输入上面的生成:
result = (
(datetime.date(2009, 11, 5), datetime.date(2009, 12, 14)),
(datetime.date(2009, 12, 29), None)
)
我使用for循环中的for循环,不知道如果没有更好的办法。性能很受关注,因为它将应用于40年的数千场景;一些列表涉及数千个日期。
X ----
说实话,我很惊讶的人有这么多的麻烦了解的问题......我会揭示应用再试一次,也许抽象使其难以可视化...
开始日期表示我们收到建议购买股票的日期。结束日期是我们收到卖出建议的日期。建议的来源不同,我们正在测试如果我们使用来自一个来源的购买建议,但来自另一来源的推荐建议会发生什么。因此,我们有两个日期序列,我们想要将这些日期序列分解成两个或两个以上的时间间隔,我们可以在这些日期中对股票持仓。
因此,我们从start_dates购买股票的日期。所以在11月5日我们买入一个头寸。现在我们通过end_dates工作寻找什么时候我们会首先被告知出售它 - 12月14日。现在重复等待买入建议,然后是卖出建议。因此,您可以交替列表以获得日期对的逻辑序列。如果最后我们持有一个未平仓头寸,我们注意到通过使用None
或提供一个特殊日期关闭。
结果如何达到您想要达到的效果。它很难说只是从这个问题你怎么想这将变成 –
@PabloKarlsson我相信所期望的结果已经在问题中指定?!这是一个日期元组列表。 –
是的,但我如何映射它们(start_dates [1],end_dates [1])? –