簡體   English   中英

如何以快速方式(python)查找一個列表中的日期時間是否落在另一個列表中的日期之間?

[英]How do I find if a datetime in one list falls in between dates in another list in a quick manner (python)?

我有這樣的列表,有很多代碼和值和日期:

values = [['NKE', 1, 2, datetime.datetime(2016, 2, 20)], ['AAPL', 1, 2, datetime.datetime(2016, 2, 1)],['AAPL', 3, 4, datetime.datetime(2016,4,2)]...]

releasedates = [['AAPL', Q3, 2015, datetime.datetime(2015, 10,5)], ['AAPL', Q4,2015, datetime.datetime(2016, 2, 5)], ['AAPL', Q1, 2016, datetime.datetime(2016, 4, 9)]

釋放是指該公司的季度結束。 我希望有一個列表,其中包含每行中值的所有信息,但也顯示了信息的四分之一。 因此,對於上述信息,最終結果將如下所示:

values_releasedates = [...['AAPL',1,2, Q4, 2015], ['AAPL', 3,4, Q1, 2016]...]

(我只在這里展示AAPL,其他像NKE這樣的公司也會有自己的參賽作品)

此代碼適用於:

values_releasedates = [[ticker, a, b, quarter, year] for ticker, a, b, date in values for [ticker_1, quarter_1, year_1, date_1], [ticker_2, quarter_2, year_2, date_2] in zip(releasedates, releasedates[1:]) if date_1 < date < date_2 and ticker == ticker_1]

但需要很長時間。 我想也許我可以創建某種字典,以某種方式削減時間,以便如果在值中彈出一個NKE條目,它只會查看NKE釋放。 但我是一個新手,我不知道從哪里開始。

讓我幫你開始正確的方向:

通過股票代碼打破兩個列表:

# Example of values
values_by_ticker = {}
for value in values:
    try:
        values_by_ticker[value[0]].append(value)
    except KeyError:
        values_by_ticker[value[0]] = [value]

然后,遍歷values_by_ticker中的每個值,找出它何時屬於:

result = []
for ticker in values_by_ticker:
    release_index = 0
    for value in ticker:
        while True:
            daterange = (rel_by_ticker[release_index], 
                         rel_by_ticker[release_index + 1])
            if is_in_range(value[3], daterange): # Exercise left for the reader
                result.append([value[0], 
                               value[1], 
                               value[2], 
                               rel_by_ticker[release_index][1], 
                               rel_by_ticker[release_index][1]])
                break
            else:
                release_index += 1

這是O(n+m) ,假設兩個列表都已排序並且不會處理錯誤(例如當您到達任何特定報價單的最后一個季度時),但它應該指向正確的方向。

我也沒有運行第二部分,因此可能存在錯誤,但邏輯應該是合理的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM