python - 根据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)]
代码说明
代码循环遍历这些值,并为检查数字中的每个部分检查它们,并保留具有较大跨度的值。如果我不得不猜测,它不是最有效或最简洁的代码,但它确实有效。而且我确实相信,当我有时间时,我可能会进一步优化它。
推荐阅读
- javascript - 如何使标题仅在大屏幕上保持粘性,但在用户向下滚动时在移动设备上消失?
- flutter - 为什么iOS模拟器打不开?
- debugging - CDB 在启动和退出时吐出“加载和卸载 NatVis 脚本”消息
- api - 如何使用 Yii2 micro 更改 xml 或 json 中的响应
- java - CSRF 令牌已与此客户端关联
- python - 回滚日期偏移量
- flutter - Flutter 如何使用 for 循环来获得超过 15 个日期?
- r - 在列表中堆叠数据框的列
- spring-boot - 使用 JWT 令牌技巧和最佳实践的 Spring Boot 安全性
- python - 更新 Tkinter 标签后如何删除故障文本?