我有一个表示年范围的整数对的列表,需要计算连续(一年内)的对的并集范围。
输入示例: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/