我苦思冥想了很长一段时间,但还是没能解决这个问题。考虑以下一段时间内记录交换机状态的序列:
A= (10:00,1),( 11:00,0),(12:00,1),(12:30,0),...,(23:00,1) #开关A在10:00接通,11:00关断,依此类推
B= (10:30,1),(11:15,0),(11:30,1),(12:15,0),...,(23:30,0) #同样
C= ...
(实际上,时间的格式是python的time.struct_time。)
所以基本上结构应该是(time1,status1),(time2,status2)....列表包含24小时内的数据,并且只记录切换实例(因此相邻的“状态”总是彼此相对的)。我想计算所有开关A、B、C都打开时的总时间。这个看似简单的问题花了我很多天才想出一些有用的东西。
发布于 2012-04-02 20:25:05
首先,将所有列表合并为一个(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发布于 2012-04-02 22:42:33
如何将开关启用的时间表示为启用开关的一天中的分钟列表,例如A=[600, 601, 602, ..., 659, ..., ],其中10am对应于一天中的600分钟。将列表转换为集合并使用交叉点的总和。
https://stackoverflow.com/questions/9976293
复制相似问题