我一直在努力思考但是无法解决这个问题。请考虑以下序列,记录开关的状态:
A = [(10:00,1),(11:00,0),(12:00,1),(12:30,0),......,(23:00,1)] #witch A在10:00开启,11:00关闭等等
B = [(10:30,1),(11:15,0),(11:30,1),(12:15,0),......,(23:30,0)] #like
C = ...
(实际上时间是python的time.struct_time格式。)
所以基本上结构是[(time1,status1),(time2,status2)...]。列表包含24小时内的数据,并且仅记录切换实例(因此相邻的“状态”始终彼此相反)。我想计算所有开关A,B,C打开时的总时间。这个看似简单的问题花了我很多天才想出一些有用的东西。
答案 0 :(得分:4)
首先将所有列表合并为(time, switch, state)
格式的一个元组列表。然后按时间对所有状态切换进行排序,给出事件的时间表。
然后有三个变量,a_on
,b_on
和c_on
。在问题指定时初始化它们(它们是全部启动还是启动等)。然后做这样的事情:
last_time = 0 # starting time of data, 0 is here as example
total_time = 0 # 0 seconds
for time, switch, state in state_switches:
if a_on and b_on and c_on:
total_time += time - last_time
if switch == "A":
a_on = state
if switch == "B":
b_on = state
if switch == "C":
c_on = state
last_time = time
答案 1 :(得分:0)
如何将启用开关的时间表示为启用开关的当天的分钟列表,例如A=[600, 601, 602, ..., 659, ..., ]
,其中上午10点对应当天的600分钟。将列表转换为集合并使用交叉点的总和。