[英]Find the value of a date subinterval given a list of date intervals with Python
假設我有一個數據集,其中包含一堆日期范圍(開始日期和結束日期)以及每個日期范圍的值。 例如,我的數據可能如下所示
Start End Value
2005-01-01 2005-01-31 6.54
2005-02-01 2005-02-28 5.55
2005-03-01 2005-03-31 3.67
2005-04-01 2005-04-30 2.91
這將作為元組列表存儲在Python中:
mydata = [(datetime.date(2005, 1, 1), datetime.date(2005, 1, 31), 6.54),
(datetime.date(2005, 2, 1), datetime.date(2005, 2, 28), 5.55),
(datetime.date(2005, 3, 1), datetime.date(2005, 3, 31), 3.67),
(datetime.date(2005, 4, 1), datetime.date(2005, 4, 30), 2.91)]
我想要一個可以采用任何日期間隔作為輸入並輸出值總和的函數。 例如,如果我的輸入是[datetime.date(2005, 2, 1), datetime.date(2005, 3, 31)]
那么我的輸出將是9.22(等於5.55 + 3.67)。
但是,如果我的輸入是[datetime.date(2005, 2, 1), datetime.date(2005, 3, 15)]
則我的輸出將為None
因為我沒有匹配項。
一種可能的解決方案是將所有日期(開始和結束類型)存儲到排序列表中。 將會有另一個數據結構(可能是字典)來維護開始日期和結束日期之間的映射以及該值。
您的搜索將包括使排序列表中的所有值都在指定范圍內,這可以通過二進制搜索有效地完成。 對於回退值中的每個開始/結束日期,還必須找到相應的開始/結束日期。 如果找到的開始日期沒有結束日期,或者找到的結束日期沒有開始日期,則該日期范圍不屬於搜索范圍,因此不應包含在結果中。 使用字典可以有效地執行此步驟。
對於第二步,我將使用bimap,因此從給定日期中查找開始/結束日期很容易。 處理通過二進制搜索找到的日期時,您可以在列表中查找期望找到的元素,並維護期望的列表。 如果稍后在搜索中找到該元素,則將其從預期列表中刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.