我有多次列表,格式为: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)`
有更好的方法吗?我的意思是,没有转换列表。
答案 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。
另外,请注意有一个很好的“平均”功能。