2015-09-15 2 views
-1

У меня есть список с несколько раз, в этот раз формат: 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)` 

Существует лучший способ сделать это? Я имею в виду, не преобразовывая список.

+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.

Также обратите внимание, что есть хорошая функция «avg».

1

То, как вы это сделали, не будет работать, потому что минуты базы 60, а не base-100. Я бы рекомендовал сначала разбить часы/минуты. Например: ["04:20", "03:00", "03:40"] будет преобразован в [(4, 20), (3, 0), (3, 40)]. Затем вы можете получить среднее значение из минут и часов отдельно и рекомбинировать результат.

Смежные вопросы