我在网络中有许多节点。节点每小时发送一次状态信息以表明它们还活着。所以我有一个节点列表和他们上次活着的时间。我想绘制一段时间内活动节点的数量。通过另一个日期列表拆分日期列表
节点列表按照它们上次的活动时间排序,但我无法找出一个很好的方法来计算每个日期有多少活着。
from datetime import datetime, timedelta
seen = [ n.last_seen for n in c.nodes ] # a list of datetimes
seen.sort()
start = seen[0]
end = seen[-1]
diff = end - start
num_points = 100
step = diff/num_points
num = len(c.nodes)
dates = [ start + i * step for i in range(num_points) ]
我想是基本上
alive = [ len([ s for s in seen if s > date]) for date in dates ]
但那不是真的有效。解决方案应该使用seen
列表进行排序并且不会遍历整个列表中每个日期的事实。
但是对于每个日期,'seen [-c:]'复制剩余的列表 –
这样?你是否计时了,发现速度较慢? – SilentGhost
一点是我已经计时了,它似乎是最快的解决方案,但我渴望在这里相反。 – SilentGhost