我有一个表示年范围的整数对的列表,需要计算连续(一年内)的对的并集范围。

输入示例:

ts_list = [[1777, 1777], [1778, 1783], [1786, 1791], [1792, 1795]]

期望的输出

[[1777, 1781], [1786, 1795]]

我已经尝试过for和while循环,并且可以在第一个脱节之前获得并集,但是我对如何正确地进行迭代感到困惑-例如这产生了一个新列表

[[1777, 1783], [1778, 1783], [1786, 1795]]

然后返回类型错误:'int' object is not subscriptable"。第一对和第三对是正确的,但是第二对是无关的

ts_list = [[1777, 1777], [1778, 1781], [1786, 1791], [1792, 1795]]
newlist=[]
last = ts_list[len(ts_list)-1][1]
for x in range(len(ts_list)):
   ts=ts_list[x]
   start = ts[0]
   end = ts[1]
   ts_next = ts_list[x+1] if x<len(ts_list)-1 else last
   if ts_next[0]-end > 1:
       # next is disjoint, break out
       newlist.append([start,end])
   else:
       # next is contiguous (within 1 year)
       newlist.append([start,ts_next[1]])

最佳答案

您可以这样:

ts_list = [[1777, 1777], [1778, 1781], [1786, 1791], [1792, 1795]]

# We start with the first range
out = [ts_list[0]]
for start, end in ts_list[1:]:
    if start <= out[-1][1] + 1:
        # if the new range starts at most one year
        # after the end of the previous one, we extend it:
        out[-1][1] = end
    else:
        # otherwise, we append this new range to the output
        out.append([start, end])

print(out)

# [[1777, 1781], [1786, 1795]]

关于python - 如何迭代整数对列表,计算新的“联合对”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55434497/

10-12 14:15