用hh:mm格式计算列表的平均值

时间:2015-09-15 00:07:50

标签: python python-2.7 time

我有多次列表,格式为:hour:minutes

[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)`

有更好的方法吗?我的意思是,没有转换列表。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

你这样做的方法是行不通的,因为分钟是基数为60而不是基数为100。我建议先把时间/分钟分开。例如:["04:20", "03:00", "03:40"]将转换为[(4, 20), (3, 0), (3, 40)]。然后,您可以分别从分钟和小时获得平均值,并重新组合结果。

答案 2 :(得分:0)

搜索支持日期/时间格式的包;有几个。 如果做不到这一点,请确保准确转换 - 您的示例有错误的答案。你需要认识到分钟是在60,而不是100。

另外,请注意有一个很好的“平均”功能。