首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当所有序列都满足特定条件时,计算时间交叉量?

当所有序列都满足特定条件时,计算时间交叉量?
EN

Stack Overflow用户
提问于 2012-04-02 20:19:14
回答 2查看 156关注 0票数 2

我苦思冥想了很长一段时间,但还是没能解决这个问题。考虑以下一段时间内记录交换机状态的序列:

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都打开时的总时间。这个看似简单的问题花了我很多天才想出一些有用的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-02 20:25:05

首先,将所有列表合并为一个(time, switch, state)格式的元组列表。然后按时间对所有状态开关进行排序,给出事件的时间线。

然后有三个变量,a_onb_onc_on。根据问题的指定对它们进行初始化(它们是全部启动还是打开,等等)。然后这样做:

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2012-04-02 22:42:33

如何将开关启用的时间表示为启用开关的一天中的分钟列表,例如A=[600, 601, 602, ..., 659, ..., ],其中10am对应于一天中的600分钟。将列表转换为集合并使用交叉点的总和。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9976293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档