2017-09-26 50 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函數,但沒有絕對值,當我這樣做時我已經排序了列表。這實際上很有幫助。 –