如何在 Python 中附加重叠元组并按顺序列出它们?



我正在研究算法,其中一个问题要求我构建一个内部日历工具,将数据存储为整数元组。我的目标是编写一个函数,该函数采用多个会议时间范围的列表并返回压缩范围的列表。

到目前为止,我已经编写了伪代码和一些真正的代码。但是,我正在尝试附加重叠时间(表示为整数(,但我卡住了。这是我到目前为止所拥有的:

# Variable containing list of tuples
meeting_times = [(0, 1), (3, 5), (4, 8), (10, 12), (9, 10)]
# Sort meetings by start time
ordered_list = sorted(meeting_times)
# For each number in the variable
for m in range(ordered_list):
# If number overlaps with another number in variable
if m[0:] >= m[:-1]:
# Append start time of first number to end time of last number
append_meeting_time =
else:
# Continue on and loop through variable.

虽然它不完整,但我想知道我是否是正确的道路。如果没有,我该如何改进我的答案?

假设您的会议时间不会相互重叠,因为您不能同时在两个地方。因此,(1,4( (3,5( 不可能发生。

一种方法是使用记住前一个元组的变量进行迭代,在这种情况下,我将它命名为"previous",我将保持变量"m"不变。

每次进入会议时间的下一个元组时,都会将上一个元组的结束会议时间与当前开始会议时间进行比较。然后删除上一个元组,因为它将是重复的。如果没有压缩操作,那么您可以直接追加到列表中,然后将"m"设置为"previous"以进行下一次迭代。

# Variable containing list of tuples
meeting_times = [(0, 1), (3, 5), (4, 8), (10, 12), (9, 10)]
# Sort meetings by start time
ordered_list = sorted(meeting_times)
print('Given time tuple: ', ordered_list)

def condensed_meeting_time(append_meeting_time, previous):
# For each number in the variable
for m in ordered_list:
if previous: # This is to catch empty tuple that was initial
if m[0] == previous[1]: # If current starting meeting time is equal to previous ending meeting time ...
del append_meeting_time[-1] # Remove the previous element
append_meeting_time.append( (previous[0], m[1]) ) # Create new tuple to merge previous start time to current ending time
else: # If the time does not overlap, append normally and set current meeting time to 'previous' for next iteration
append_meeting_time.append(m)
previous = m
else: # Base case to append the first element.
append_meeting_time.append(m)
previous = m
return append_meeting_time
print('After condensed range: ',condensed_meeting_time([], ()))

这是我得到的输出:

Given time tuple:  [(0, 1), (3, 5), (4, 8), (9, 10), (10, 12)]
After condensed range:  [(0, 1), (3, 5), (4, 8), (9, 12)]

我希望这有所帮助。

最新更新