回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>问题:
有人能提出一个更好或更具Python式的方法,将重叠范围对减少到非重叠范围对吗?在</p>
<p>背景:
我有一个表示起始和结束对的元组列表。我试图基本上完成所有起始-结束对的联合。输入开始-结束对具有重叠值,并且输出应该表示没有任何重叠的输入开始-结束对。在</p>
<p>下面的代码很接近,但是错误的,因为它输出了一个不在输入中的额外范围(我也意识到它不是很好,为什么它错了)。有谁能提出一个更好的方法,或者一些我忽略了的内置函数?在</p>
<p>为这个基本问题道歉。
谢谢你的帮助!在</p>
<pre><code>##create example data
pairA =[(0,5),(10,12)]
pairB =[(1,2),(11,15)]
pairC =[(1,4),(10,12),(15,17)]
#combine the lists to one list
#ultimately may have n number of lists and felt it would be easier to
merged = pairA + pairB +pairC
# produce union of list * unpacks the arguments of a list
listUnion= sorted(set().union(*merged))
#this is the piece of code I am looking at improving
#it creates new start end pairs based on the union
lastElement =listUnion[-1]
outList=[]
for item in listUnion:
#create start end pair from value i and i+1
if item != lastElement:
outList.append((item,listUnion[listUnion.index(item)+1]))
else:
#last element of the list, becomes the last element of list pair
#it can be ignored
pass
print outList
"""output: [(0, 1), (1, 2), (2,4), (4, 5), (5, 10), (10, 11), (11, 12), (12, 15), (15,
17)]
correct output: would not have (5,10) as there is no overlap here in the input """
</code></pre>
<p>编辑:添加了问题的可视化表示<a href="https://i.stack.imgur.com/5c1e0.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/5c1e0.jpg" alt="enter image description here"/></a></p>