Tôi có nhiệm vụ tạo bộ ngày dựa trên điều kiện cụ thể, ví dụ "lớn hơn 2" sẽ được chuyển và tôi cần tạo một tập hợp tất cả các ngày trong tháng này một ngày> 2. cũng Ill có thời gian bắt đầu và thời gian dừng cho ví dụ 10:00-18:00 trong trường hợp này tôi sẽ tạo ra một tập hợp của tất cả các ngày> 2 và trong mỗi ngày nó có một thời gian để bắt đầu lúc 10 giờ sáng và kết thúc và 6 giờ chiều, dưới đây là một ví dụ:so sánh danh sách datetime với dict của 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
tôi quyết định để lưu trữ những ngày này thành một cuốn từ điển như sau:
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]]}
tôi đã sử dụng dict vì tôi sẽ có nhiều điều kiện mà tôi cần để tạo ra bộ ngày đối với họ, vì vậy sẽ có ví dụ khác quan trọng khác hơn dates_between_2_5.
tại Mặt khác tôi nhận được một yêu cầu dựa trên một điều kiện quá để tạo ngày với thời gian bắt đầu chỉ như sau:
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
tôi quyết định để lưu trữ những ngày này trong một danh sách:
listL = [2016-07-02 14:00,2016-07-03 14:00,2016-07-04 14:00 ... 2016-07-11 14:00]
sau đó tôi so sánh mỗi ngày từ ListL với danh sách ngày cho mỗi khóa từ DictD và nếu một ngày từ ListL nằm trong một bắt đầu, dừng thời gian sau đó tôi nên loại bỏ nó khỏi danh sách và chỉ trả về ngày từ ListL mà don không trùng lặp với ngày từ DictD, logic của tôi giống như sau 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
Câu hỏi của tôi là tôi đang sử dụng cấu trúc dữ liệu hiệu quả để xử lý các yêu cầu của mình? Tôi thấy logic của tôi không hiệu quả nên tôi đã tự hỏi liệu có cách nào tốt hơn để tiếp cận vấn đề này không?
mọi trợ giúp sẽ được đánh giá cao. cảm ơn trước!
Một chút tư vấn ngoài chủ đề, không đặt số 0 đứng đầu trên hằng số nguyên. Trong Python 2 bạn có thể nhận được một giá trị mà bạn không có ý định, và trong Python 3 nó tạo ra một lỗi (ngoại trừ '00'). –