根据 python 中跨度的长度从元组值列表中删除重叠跨度
Remove overlapping spans from list of tuple values based on the length of spans in python
我有一个包含字符跨度的元组列表。但是有些情况下跨度会重叠。
我的目标是以这样一种方式修改元组列表,即对于重叠,只保留较大的跨度值并删除较小的跨度值
示例:
Original list: [(2, 3), (7, 9), (10, 11), (10, 12), (15, 17), (16, 17), (20, 21), (20, 29), (21, 28)]
Modified list: [(2, 3), (7, 9), (10, 12), (15, 17), (20, 29)]
这里 (10,11) , (16,17) , (20,21) , (21,28) 被删除了,因为它们与 (10,12) , (15,17) 有更大的跨度重叠和 (20,29) 分别。
我找到了一些像 这样处理重叠的答案,但这些答案不处理更大的跨度问题。
我的想法是按降序对跨度差异的长度进行排序,然后以某种方式搜索重叠。这种对重叠的搜索是我无法弄清楚的
代码
values = [(2, 3), (7, 9), (10, 11), (10, 12), (15, 17), (16, 17), (20, 21), (20, 29), (21, 28)]
outputs = []
for value in values:
flag = True
outputsLoop = outputs[:]
for output in outputsLoop:
fromVal, toVal = output
if value[0] in range(fromVal,toVal+1) or value[1] in range(fromVal,toVal+1):
if (value[1]-value[0]) > (toVal - fromVal):
outputs.remove(output)
else:
flag = False
if flag == True:
outputs.append(value)
print(outputs)
输出
[(2, 3), (7, 9), (10, 12), (15, 17), (20, 29)]
代码解释
代码循环遍历这些值,并检查检查数字中的每个部分,并保留具有较大跨度的值。如果我不得不猜测的话,它不是最有效或最干净的代码,但它确实有效。而且我确实相信,当我有时间的时候,我可能会进一步优化它。
我有一个包含字符跨度的元组列表。但是有些情况下跨度会重叠。 我的目标是以这样一种方式修改元组列表,即对于重叠,只保留较大的跨度值并删除较小的跨度值
示例:
Original list: [(2, 3), (7, 9), (10, 11), (10, 12), (15, 17), (16, 17), (20, 21), (20, 29), (21, 28)]
Modified list: [(2, 3), (7, 9), (10, 12), (15, 17), (20, 29)]
这里 (10,11) , (16,17) , (20,21) , (21,28) 被删除了,因为它们与 (10,12) , (15,17) 有更大的跨度重叠和 (20,29) 分别。
我找到了一些像
我的想法是按降序对跨度差异的长度进行排序,然后以某种方式搜索重叠。这种对重叠的搜索是我无法弄清楚的
代码
values = [(2, 3), (7, 9), (10, 11), (10, 12), (15, 17), (16, 17), (20, 21), (20, 29), (21, 28)]
outputs = []
for value in values:
flag = True
outputsLoop = outputs[:]
for output in outputsLoop:
fromVal, toVal = output
if value[0] in range(fromVal,toVal+1) or value[1] in range(fromVal,toVal+1):
if (value[1]-value[0]) > (toVal - fromVal):
outputs.remove(output)
else:
flag = False
if flag == True:
outputs.append(value)
print(outputs)
输出
[(2, 3), (7, 9), (10, 12), (15, 17), (20, 29)]
代码解释
代码循环遍历这些值,并检查检查数字中的每个部分,并保留具有较大跨度的值。如果我不得不猜测的话,它不是最有效或最干净的代码,但它确实有效。而且我确实相信,当我有时间的时候,我可能会进一步优化它。