【发布时间】:2010-08-23 18:55:28
【问题描述】:
我有一个巨大的二元素元组列表,它们是段的坐标(开始,结束)。这样在下面的列表中
list = [ (1,4), (2, 3), (10, 20), (18, 45) ]
有 4 个片段及其开始和结束本地化。我想删除重叠的部分。我希望得到一个这样的列表:
list = [ (1,4), (10,20) ].
我已经编写了一个函数,它将一对线段作为输入,如果它们的坐标重叠,则返回 1:
def test_overlap(s1,e1,s2,e2):
if (s1 <= e2 and e1 >= s2) or (e1 >= s2 and s1 <= e2):
return 1
if (s1 <= s2 and e1 >= e2) or (s1 >= s2 and e1 <= e2):
return 1
但我不知道如何有效地比较大量细分列表中的每一对。任何帮助将不胜感激!
【问题讨论】:
-
范围是否有最大尺寸?
-
你怎么知道正确的输出不应该是[ (1,4), (18,45) ]?
-
@Aren 不,这不是家庭作业,我正在尝试识别人类基因组中的重叠基因,这些统计和停止坐标是基因的实际坐标。 @gnibbler,是的,有一个最大值:400。
-
正确答案是 [],因为每个片段都至少与其他片段重叠
-
@recursive,我为每个段分配了一个分值,我总是会选择得分较高的那个。
标签: python algorithm list comparison