我有開始日期列表和結束日期列表。他們被分類...如何將兩個日期列表合併爲一系列日期間隔?
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])? –