Ich habe Listen, die so aussehen, dass eine Menge Tickern und Werte und Daten hat:Wie finde ich heraus, ob eine Datetime in einer Liste schnell zwischen Daten in einer anderen Liste liegt (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)]
Releasedatum bezieht sich auf das Ende der Quartale für das Unternehmen. Ich möchte eine Liste haben, die alle Informationen in Werten in jeder Zeile enthält, aber auch zeigt, in welches Viertel die Information gehört. Also für die oben genannten Informationen das Endergebnis würde wie folgt aussehen:
values_releasedates = [...['AAPL',1,2, Q4, 2015], ['AAPL', 3,4, Q1, 2016]...]
(Ich zeige nur AAPL hier, andere Unternehmen wie NKE von Werten auch dort sein würde, mit ihren eigenen Einträge)
Dieser Code funktioniert:
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]
aber dauert sehr lange. Ich dachte mir, dass ich vielleicht ein Wörterbuch erstellen könnte, das die Zeit irgendwie verkürzt, so dass, wenn ein NKE-Eintrag in den Werten erscheint, nur NKE-Releases angezeigt werden. Aber ich bin so ein Neuling, ich weiß nicht, wo ich anfangen soll.
Sie versuchen, viel zu viel in einem einzigen Listenverständnis zu tun, und deshalb gibt es logische Fehler und Ineffizienzen in Ihrer Methode: Dies füllt zwischen Ticker AAPLQ1/Q2 alle Tickerdaten, die zwischen seinen Bereich fallen Ich bin ziemlich sicher, ist nicht deine Absicht. – TemporalWolf
@TemporalWolf Wenn Sie sagen, dass ich möchte, dass alle Einträge von Werten mit AAPL-Tickern zwischen die korrekten zwei Anmeldedaten eingefügt werden, möchte ich, dass dies geschieht. Es könnte potenziell viel pro Quartal geben. Irgendwelche Gedanken, wie man das effizienter macht? (Ich habe meinen Code aktualisiert, um anzugeben, wo Ticker == Ticker_1) – user285884
Ihr aktueller Code ist 'O (n * m)', wenn eine optimierte Version 'O (n + m)' wäre (vorausgesetzt, die Werte sind bereits nach sortiert Datum). Sie müssen das Listenverständnis auflösen, wie ich schon sagte. Brechen Sie beide Listen nach Ticker in Listen. Erstellen Sie dann für jeden Ticker den vierteljährlichen Bereich einmal für diesen Ticker und durchlaufen Sie dann beide Listen, bis Sie das Ende von 'values_by_ticker [ticker]' erreichen. – TemporalWolf