Average time for datetime list

前端 未结 4 2162
春和景丽
春和景丽 2020-12-10 05:13

Looking for fastest solution of time averaging problem.

I\'ve got a list of datetime objects. Need to find average value of time (excluding year, month, day). Here i

4条回答
  •  南笙
    南笙 (楼主)
    2020-12-10 05:18

    You would at least use sum() with a generator expression to create the total number of seconds:

    from datetime import datetime, date, time
    
    def avg_time(datetimes):
        total = sum(dt.hour * 3600 + dt.minute * 60 + dt.second for dt in datetimes)
        avg = total / len(datetimes)
        minutes, seconds = divmod(int(avg), 60)
        hours, minutes = divmod(minutes, 60)
        return datetime.combine(date(1900, 1, 1), time(hours, minutes, seconds))
    

    Demo:

    >>> from datetime import datetime, date, time, timedelta
    >>> def avg_time(datetimes):
    ...     total = sum(dt.hour * 3600 + dt.minute * 60 + dt.second for dt in datetimes)
    ...     avg = total / len(datetimes)
    ...     minutes, seconds = divmod(int(avg), 60)
    ...     hours, minutes = divmod(minutes, 60)
    ...     return datetime.combine(date(1900, 1, 1), time(hours, minutes, seconds))
    ... 
    >>> avg_time([datetime.now(), datetime.now() - timedelta(hours=12)])
    datetime.datetime(1900, 1, 1, 7, 13)
    

提交回复
热议问题