计算平均时间时的结果很奇怪

时间:2014-07-19 20:12:10

标签: python time

我有这个方法,其目的是获取一组得分对象,使用get_run_time_str()方法从中提取运行时间,然后计算所有运行时间的平均值。 get_run_time_str()方法以字符串格式返回时间' mm:ss'。我目前采取的程序是采取' s'部分时间,将其转换为十进制(基数为10),将其转换为分钟数并执行平均计算,然后将其转换回秒(基数为60)格式。

此过程适用于我目前拥有的大多数数据集。我已经通过平均时间的在线工具证实了这一点。然而,有些数据,无论出于何种原因,给我一个大于60的秒值。这是代码(我意识到我需要尝试清理类型转换一点):

def get_avg_two_mile(self, scores):
    sum_time = 0
    length = len(scores)
    for score in scores:
        stripped_score = score.get_run_time_str().replace(':', '')
        seconds = int(stripped_score[2:])
        seconds = str(seconds/float(60))
        stripped_score = float(stripped_score[:2] + '.' + seconds[2:])
        sum_time = sum_time + stripped_score
    avg = sum_time/float(length)
    decimal = str(avg).split('.')[1]
    decimal = str(int(decimal) * 60)
    avg = str(avg).split('.')[0] + ':' + str(decimal)[:2]
    return avg

当包含时间的数据集:' 16:34',' 16:18'和' 18:39'根据我使用的在线工具,我应该得到平均时间17:07。相反,我得到了#17; 17:70'在那里不是很有效。大多数数据集再次返回准确的时间,但在某些情况下会出现此问题。

实现这一目标的代码有点混乱,当然比通过将分钟转换为秒并从那里平均来执行此过程更麻烦,但是当我运行它时,这种方法似乎不起作用提示。

有什么想法吗?使用任何内置的python时间相关类,这个过程会更容易吗?

1 个答案:

答案 0 :(得分:2)

问题在于每分钟有60秒。因此,平均17.1016.50会给16.80

您应该在几秒钟内完成计算。然后:

stripped_score = 60 * float(stripped_score[:2]) + float(seconds[2:])

在此之后,您的平均时间字符串可以形成为:

"{:02d}:{:02d}".format(avg / 60, int(avg % 60))

(你是对的,你需要清理一下。如果你需要随着时间的推移进行更多的计算,你甚至可能想看看timedatetime模块。 )