Ho un compito per creare insiemi di date in base a condizioni specifiche, ad esempio "maggiore di 2" verrà passato e ho bisogno di creare un insieme di tutte le date in questo mese che hanno un giorno> 2. Anche io sto ricevendo un orario di inizio e un orario di stop per es 10:00-18:00 in questo caso voglio creare un insieme di tutte le date> 2 e in ogni giorno ha un momento di iniziare alle 10 e le estremità e 6:00, sotto è un esempio:confronta l'elenco di data/ora per indicare data/ora
greater > 2 less < 9
start time :10am
stop time :6 pm
month:july
date1: 2016-07-03 10:00, 2016-07-03 16:00
date2: 2016-07-04 10:00, 2016-07-04 16:00
date3: 2016-07-05 10:00, 2016-07-05 16:00
.
.
.
date6: 2016-07-8 10:00, 2016-07-8 16:00
ho deciso di archiviare queste date in un dizionario come il seguente:
dictD = {'dates_between_2_9':[[2016-07-03 10:00, 2016-07-03 16:00], [2016-07-04 10:00, 2016-07-04 16:00], ....., [2016-07-08 10:00, 2016-07-08 16:00]]}
ho usato il dict perché avrò più condizioni che ho bisogno di creare insiemi di date per loro, quindi non ci sarà ad esempio un altro tasto diverso da dates_between_2_5.
presso altra parte ottengo un'altra richiesta sulla base di una condizione troppo per creare le date con l'ora di inizio solo come la seguente:
greater > 1 less than 12
start time : 2pm
date1: 2016-07-02 14:00
date2: 2016-07-03 14:00
date3: 2016-07-04 14:00
.
.
.
date10: 2016-07-11 14:00
ho deciso di archiviare queste date in un elenco:
listL = [2016-07-02 14:00,2016-07-03 14:00,2016-07-04 14:00 ... 2016-07-11 14:00]
dopo aver confrontato ogni data da ListL all'elenco di date per ogni chiave da DictD e se una data da ListL si trova all'interno di un punto di inizio, ora di arresto, dovrei rimuoverlo dall'elenco e restituire solo le date da ListL che non si sovrappongono con le date di DictD, la mia logica è come il seguito ing:
for L from ListL:
for every key in DictD:
for item from DictD[key]:
if DictD[key][0] < L < DictD[key][1] # check if item from list overlap with start,stop time from dictionary.
ListL.remove(L) # I know I can't remove items from list while iterating so I will probably create a set and store all overlapped items and then subtract this set to set(ListL) to get the difference.
return ListL
La mia domanda è: sto utilizzando una struttura dati efficiente per gestire i miei requisiti? Vedo che la mia logica non è così efficiente, quindi mi chiedevo se c'è un modo migliore per affrontare questo problema?
qualsiasi aiuto sarebbe molto apprezzato. grazie in anticipo!
Un piccolo consiglio off-topic, non inserire uno zero iniziale sulle costanti integer. In Python 2 potresti ottenere un valore che non intendevi, e in Python 3 genera un errore (ad eccezione di '00'). –