У меня есть задача создания наборов дат на основе определенного условия, например, "больше 2" будет передано, и мне нужно создать набор всех дат в этом месяце, у которых есть день > 2. Также Ill be be получение времени начала и времени остановки, например С 10:00 до 18:00 в этом случае я создам набор всех дат > 2 и каждый день у него будет время для начала в 10:00 и заканчивается и 6 вечера, ниже приведен пример:
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
Я решил сохранить эти даты в словаре следующим образом:
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]]}
Я использовал dict, потому что у меня будет несколько условий, которые мне нужны для создания наборов дат для них, поэтому будет, например, другой ключ, отличный от date_between_2_5.
с другой стороны, я получаю другой запрос на основе условия также для создания дат со временем начала, только следующим образом:
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
Я решил сохранить эти даты в списке:
listL = [2016-07-02 14:00,2016-07-03 14:00,2016-07-04 14:00 ... 2016-07-11 14:00]
после этого я сравниваю каждую дату из списка ListL с списком дат для каждого ключа из DictD, и если дата из ListL находится в начале, остановите время, то я должен удалить его из списка и вернуть только даты из списка ListL, которые не перекрывайте даты с DictD, моя логика выглядит следующим образом:
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
Мой вопрос: использую ли я эффективные структуры данных для обработки моих требований? Я вижу, что моя логика не настолько эффективна, поэтому мне было интересно, есть ли лучший способ для решения этой проблемы?
любая помощь будет принята с благодарностью. спасибо заранее!