Mam zadanie do tworzenia zestawów dat na podstawie konkretnego warunku, na przykład "większy niż 2" zostanie przekazany i muszę utworzyć zestaw wszystkich dat w tym miesiącu, które mają dzień> 2. Również dostaję czas rozpoczęcia i czas zatrzymania dla np 10 am-6pm w tym przypadku będzie utworzyć zbiór wszystkich terminów> 2 iw każdym dniem ma czas, aby rozpocząć o godzinie 10, a kończy i 6pm, poniżej przykład:porównaj listę datetime do dykcji datetime
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
zdecydowałem się zapisać terminy te w słowniku jak poniżej:
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]]}
użyłem dict bo mam wiele warunków, które trzeba utworzyć zestawy dat dla nich, więc nie będzie na przykład inny klucz innego niż dates_between_2_5.
co z drugiej strony mam kolejny wniosek na podstawie warunku zbyt stworzyć daty z godziną rozpoczęcia tylko tak:
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
postanowiłem zapisać te daty w formie listy:
listL = [2016-07-02 14:00,2016-07-03 14:00,2016-07-04 14:00 ... 2016-07-11 14:00]
potem porównuję każdą datę z ListL z listą dat dla każdego klucza z DictD i jeśli data z ListL leży w czasie rozpoczęcia, zatrzymania, to powinienem usunąć ją z listy i zwrócić tylko daty z listy nie pokrywają się z datami z DictD, moja logika jest jak następująca In:
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
Moje pytanie brzmi: czy używam wydajnych struktur danych do obsługi moich wymagań? Widzę, że moja logika nie jest tak skuteczna, więc zastanawiałem się, czy istnieje lepszy sposób na rozwiązanie tego problemu?
każda pomoc byłaby bardzo doceniana. z góry dzięki!
Nieodpowiednia rada, nie umieszczaj początkowego zera na stałych całkowitych. W Pythonie 2 możesz uzyskać wartość, której nie chcesz, aw Pythonie 3 generuje błąd (z wyjątkiem '00'). –