2017-09-26 55 views
0

列表的最短和最长的时间间隔,我有时间间隔以分钟为单位列表,如下所示:如何计算在python

lst = [9.7, 16.1, 16.5, 2.3, 0.2, 7.0, 4.8, 24.9, 17.6, 13.8, 12.3, 
16.2, 2.4, 8.7, 2.7, 35.5, 0.9, 25.6, 1.2, 17.4, 6.2, 7.8, 27.7, 0.3, 
0.9, 37.0, 10.7, 1.4, 65.3, 44.0, 1.8, 8.3, 2.2, 5.6, 14.6, 2.7, 17.9, 
0.8, 2.8, 25.4, 7.7, 8.1, 13.6, 9.7, 7.3, 0.5, 19.4, 51.4, 56.1, 16.3] 

我试图计算最长和最短等待之间的时间列表lst中的间隔。我试过如下:

size = len(lst) 
interval_diff = [lst[i + 1] - lst[i] for i in range(size) if i+1 < size] 
print("shortest waiting time:",(min(interval_diff))) 
print("longest waiting time:",(max(interval_diff))) 

这给了我的结果:

shortest waiting time: -42.2 
longest waiting time: 63.9 

的问题是,我能够正确计算最长等待时间,但等待时间最短是给我-42.2时间不能是负面的。如果我尝试使用绝对值,它会给我积极的42.2,这不是最短的等待时间,如果我们比较列表中的每个时间间隔和下一个时间间隔。我无法对列表进行排序,因为它需要按现在的时间间隔排列。有没有人有任何想法,我怎样才能获得列表中最短的等待时间?在这种情况下,我猜它应该是2.3-0.2这是2.1?任何帮助将不胜感激。

+0

但'0.2'是后'2.3',和你'重新计算'0.2 - 2.3'而不是'2.3 - 0.2'。而'0.4.5'的'16.5 - 16.1'小于'2.1'。 –

+0

@MrGeek你是对的,对不起我以2.3 - 0.2为例。最短的等待时间是16.5 - 16.1,即0.4。 –

回答

2

而不是做min然后abs的,占据了绝对的区别,每次之间:

interval_dff = [abs(x - y) for x, y in zip(lst[1:], lst)] 

然后,你可以使用min/max

+0

感谢@HyperNeutrino这个工程,我曾尝试使用zip函数,但没有绝对值,当我这样做时我已经排序了列表。这实际上很有帮助。 –