python时间间隔算法和

假设我有2个时间间隔,例如16:30 – 20:00和15:00 – 19:00,我需要找到这两个间隔之间的总时间,所以结果是5个小时(我添加两个间隔并减去交叉间隔),我怎样才能编写一个通用函数,它也处理所有情况,例如其他区间内的一个区间(因此结果是较大区间的区间),没有交点(因此结果是两个区间的总和).

我的传入数据结构是原始的,只是字符串像“15:30”,因此可能需要转换.

谢谢

解决方法:

from datetime import datetime, timedelta

START, END = xrange(2)
def tparse(timestring):
    return datetime.strptime(timestring, '%H:%M')

def sum_intervals(intervals):
    times = []
    for interval in intervals:
        times.append((tparse(interval[START]), START))
        times.append((tparse(interval[END]), END))
    times.sort()

    started = 0
    result = timedelta()
    for t, type in times:
        if type == START:
            if not started:
                start_time = t
            started += 1
        elif type == END:
            started -= 1
            if not started:
               result += (t - start_time) 
    return result

从问题中测试您的时间:

intervals = [
                ('16:30', '20:00'),
                ('15:00', '19:00'),
            ]
print sum_intervals(intervals)

打印:

5:00:00

与不重叠的数据一起测试

intervals = [
                ('16:30', '20:00'),
                ('15:00', '19:00'),
                ('03:00', '04:00'),
                ('06:00', '08:00'),
                ('07:30', '11:00'),
            ]
print sum_intervals(intervals)

结果:

11:00:00
上一篇:【LeetCode-java实现】56. Merge Intervals合并区间


下一篇:Python:动态区间数据结构