我正在尝试实施考勤系统。我有两个列表,我已经将它们转换为Unix时间戳。一个列表包含修复时间表,另一个列表是学生的时间表。
例如,时间表列表可能包括
timetable[1519650000, 1519740000, 1519743600]
timetableEnd[1519653600, 1519743600, 1519747200]
log[1519739987, 1519744087]
以人类可读的方式但不在代码中
timetable[2018-02-26 13:00:00, 2018-02-27 14:00:00, 2018-02-27 15:00:00]
timetableEnd[2018-02-26 14:00:00, 2018-02-27 15:00:00, 2018-02-27 16:00:00]
log[2018-02-27 13:59:47, 2018-02-27 15:08:07]
是一种循环每个日志元素的方法,以检查将同意这种情况的时间表元素
a< = x< = b
Where a = timetable begin time - 5mins
x = log time
b = end time for timetable time
Example: (1519650000 - 300) <= x <= 1519653600
return false since log doesnt have a value that satisfy this
我可以就如何进行此操作获得一些建议或指导。
答案 0 :(得分:1)
您可以使用模式zip(a[:-1], a[1:])
构建列表的邻居对,并且可以使用zip(a, b)
将两个同等长的列表的元素配对。使用这两件事你可以试试这个:
if all(start-300 <= log_element <= end
for ((start, end), log_element) in zip(
zip(timetable[:-1], timetable[1:]), log)):
print("All logs are in their boundaries.")
在您的情况下,由于log[1]
不在timetable[1]-300
和timetable[2]
之间,因此无法成功。
如果您不熟悉Python优雅的功能风格,您可能会发现它更易于理解(不太优雅):
def all_logs_in_boundaries(timetable, log):
for ((start, end), log_element) in zip(
zip(timetable[:-1], timetable[1:]), log)):
if not (start-300 <= log_element <= end):
return False
return True # or: print("All logs are in their boundaries.")
答案 1 :(得分:1)
为什么不使用日期时间? 使用类似这样的东西
import datetime
logtime = datetime.datetime.fromtimestamp(x)
begintime = datatime.datetime.fromtimestamp(a)
arrivaltime = logtime - datetime.timedelta(minutes=5)
return (arrivaltime <= logtime and logtime <= begintime)
logtime是x的日期时间 begintime是a的日期时间 到达时间比开始时间早5分钟