【发布时间】:2019-11-29 18:14:05
【问题描述】:
我逐字逐句地关注这个,但与原始帖子相比得到了不同的结果,我不知道为什么。我想将成对的时间相互比较以检查它们重叠的位置。我正在使用 Python 3.6.6
Find if dates are overlapping in a list of N pairs
这是我编码的:
import datetime
from collections import namedtuple
from itertools import combinations
timesok = [('09:30', '10:00'), ('10:00', '10:30'), ('10:30', '11:00')]
wrongtimes1 = [('9:30', '10:00'), ('9:00', '10:30'), ('10:30', '11:00')]
wrongtimes2=[('9:30', '10:00'), ('10:00', '10:30'), ('9:15', '9:45')]
def test_overlap(dt1_st, dt1_end, dt2_st, dt2_end):
Range = namedtuple('Range', ['start', 'end'])
r1 = Range(start=dt1_st, end=dt1_end)
r2 = Range(start=dt2_st, end=dt2_end)
latest_start = max(r1.start, r2.start)
earliest_end = min(r1.end, r2.end)
overlap = (earliest_end - latest_start)
return overlap.seconds
def find_overlaps(times):
pairs = list(combinations(times, 2))
print(pairs)
for pair in pairs:
start1 = datetime.datetime.strptime(pair[0][0], '%H:%M')
end1 = datetime.datetime.strptime(pair[0][1], '%H:%M')
start2 = datetime.datetime.strptime(pair[1][0], '%H:%M')
end2 = datetime.datetime.strptime(pair[1][1], '%H:%M')
yield test_overlap(start1, end1, start2, end2) > 0
list(find_overlaps(timesok))
list(find_overlaps(wrongtimes1))
list(find_overlaps(wrongtimes2))
# timesok result:
list(find_overlaps(timesok))
[(('09:30', '10:00'), ('10:00', '10:30')),
(('09:30', '10:00'), ('10:30', '11:00')),
(('10:00', '10:30'), ('10:30', '11:00'))]
Out[7]: [False, True, False]
# wrongtimes1 result:
list(find_overlaps(wrongtimes1))
[(('9:30', '10:00'), ('9:00', '10:30')),
(('9:30', '10:00'), ('10:30', '11:00')),
(('9:00', '10:30'), ('10:30', '11:00'))]
Out[8]: [True, True, False]
# wrongtimes2 result:
list(find_overlaps(wrongtimes2))
[(('9:30', '10:00'), ('10:00', '10:30')),
(('9:30', '10:00'), ('9:15', '9:45')),
(('10:00', '10:30'), ('9:15', '9:45'))]
Out[9]: [False, True, True]
我认为结果应该如下(与上面链接中的原始示例相对应):
Out[7]: [False, False, False]
Out[8]: [True, False, False]
Out[9]: [False, True, False]
我在这里遗漏了一些非常明显的东西吗?我是一个 Python 新手,所以对我温柔一点(!)
【问题讨论】:
标签: python-3.x time