2015-09-15 55 views
-1

我有多次的清單,這個時間格式:hour:minutes計算平均hh的名單:mm格式

[u'04:20', u'03:00', u'03:40'] 

現在我需要計算的平均時間這個名單。這使我想到的第一個想法就是該列表轉換爲類似:

a = [04.20, 03.00, 03.40] 

total = 0.0 
for i in a: 
    total += i 

print total/len(a) #3.53333333333 
#or `sum(a)/len(a)` 

有這樣做的更好的辦法?我的意思是,沒有轉換清單。

+1

'00:00'和'12:00'的平均值是多少? – orlp

+0

@orlp 00:00在列表中不存在。至少需要00:01 – anvd

+1

你在迴避這個問題。 '00:01'和'12:01'的平均值是多少? – orlp

回答

4

如果您將時間視爲持續時間或執行任務所需的時間,則可能會讀得更好。

您不能直接將其轉換爲小數,因爲一小時內有60分鐘,而不是100分鐘。您可以做的是將所有內容都轉換爲分鐘,然後計算出平均值。類似這樣的:

times = [u'04:20', u'03:00', u'03:40'] 
to_min = lambda t: int(t.split(':')[0])*60 + int(t.split(':')[1]) 
to_hr = lambda m: '%02d:%02d' % ((m - m%60)/60, m%60) 
average = to_hr(sum([to_min(t) for t in times])/len(times)) 
print average 
# 03:40 
0

搜索支持日期/時間格式的包;有幾個。 如果不成功,請確保您準確地進行轉換 - 您的示例有錯誤的答案。你需要認識到,分鐘是在基數60,而不是100.

另外,請注意,有一個很好的「平均」功能。

1

你做到這一點的方式將不起作用,因爲分鐘是基數爲60,而不是基數爲100。我建議先打破小時/分鐘。例如:["04:20", "03:00", "03:40"]將被轉換爲[(4, 20), (3, 0), (3, 40)]。然後,您可以分別從分鐘和小時中獲取平均值並重新組合結果。