【问题标题】:converting a list of times to total time [closed]将时间列表转换为总时间[关闭]
【发布时间】:2013-04-23 10:49:14
【问题描述】:

我有 3 个列表,一个用于小时,一个用于分钟,一个用于秒。我所做的是创建一个函数,它将 3 个列表作为输入并计算总时间。

我的问题是这个功能太多余了,我对你的问题很简单:什么是更好的方法来做到这一点。

这是我的功能:

def final_time(hours,minutes,seconds):
    draft_hours = sum(hours)
    draft_minutes = sum(minutes)
    draft_seconds = sum(seconds)
    adding_seconds = str(draft_seconds/60.0)
    second_converting = adding_seconds.split(".")
    seconds_to_minutes = int(second_converting[0])
    seconds_to_seconds = draft_seconds - (seconds_to_minutes * 60)
    total_seconds = str(seconds_to_seconds)
    more_minutes = draft_minutes + seconds_to_minutes
    adding_minutes = str(more_minutes/60.0)
    minute_converting = adding_minutes.split(".")
    minutes_to_hours = int(minute_converting[0])
    minutes_to_minutes = more_minutes - (minutes_to_hours * 60)
    total_minutes = str(minutes_to_minutes)
    total_hours = str(draft_hours + minutes_to_hours)
    return total_hours + " hours, " + total_minutes + " minutes, and " + total_seconds + " seconds."

这是一个例子:

my_hours = [5, 17, 4, 8]
my_minutes = [40, 51, 5, 24]
my_seconds = [55, 31, 20, 33]
print final_time(my_hours,my_minutes,my_seconds)

以上回报:

36 hours, 2 minutes, and 19 seconds.

所以它确实有效,但正如您所见,该函数既不是 Python 式的,也不是高效的函数...更好的方法是什么?

【问题讨论】:

标签: python list function time


【解决方案1】:
def HMSToSeconds(H,M,S):
   return H*3600 + M * 60 + S

def SecondsToHMS(seconds):
   hours,seconds = divmod(seconds,3600)
   mins,seconds = divmod(seconds,60)
   return hours,mins,seconds

def final_time(hours,minutes,seconds):
    draft_hours = sum(hours)
    draft_minutes = sum(minutes)
    draft_seconds = sum(seconds)
    total_seconds = HMSToSeconds(draft_hours,draft_minutes,draft_seconds)
    return SecondsToHMS(total_seconds)

【讨论】:

    【解决方案2】:
    s = sum(hours)*3600+sum(minutes)*60+sum(seconds)
    return '%d hours %d minutes %d seconds'%( s/3600, (s%3600)/60, s%60)
    

    【讨论】:

    • 我比我更喜欢你的秒数转换。我的假设hoursminutesseconds 中的元素数量相同,但我想我看不出有任何理由为什么通常会出现这种情况。 (+1)
    【解决方案3】:

    我可能会先将其全部转换为秒:

    seconds = sum(3600*h + 60*m + s for (h,m,s) in zip(hours,minutes,seconds)
    

    现在将其分解:

    n_hours,minutes = divmod(seconds,3600)
    n_minutes,n_seconds = divmod(minutes,60)
    

    【讨论】:

      【解决方案4】:

      我会使用来自 Datetime http://docs.python.org/2/library/datetime.html#time-objects 的时间对象

      应该是这样的:

      def final_time(hours,minutes,seconds):
          times=[datetime.time(hours[i],minutes[i],seconds[i]) for i in range(0,length(hours))]
          return sum(times)
      

      【讨论】:

        猜你喜欢
        • 2014-08-30
        • 1970-01-01
        • 1970-01-01
        • 2019-08-20
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 2016-12-31
        相关资源
        最近更新 更多