我有一个很长的值列表x和y,按x值排序。我想输出x和y值最长连续跨度的列表。这是有点难以付诸话但将有希望成为用下面的例子清楚:作为5768和6000之间的区域没有被任何条目的覆盖,上述应迷惑分区域列表中的覆盖区域
0, 148
0, 145
0, 186
0, 5768
600, 2374
2376, 2415
3000, 4315
6000, 6616
6000, 6799
6000, 7262
输出:
0, 5768
6000, 7262
在我看来,这应该是一个简单的问题,但我一直没有解决方案的工作一段时间。我已经在下面发布了我的代码。 我目前的努力存在的问题是,虽然对x值进行排序,但可能是第k行的x值超过第k-1行的y值,但不标记新连续字符串的开始。
lines = [line.strip('\n') for line in open('test')]
myarray=[]
for line in lines:
myarray.append(line.split(', '))
def findCoveredRegions(regionArray):
resultsContigs = []
j = regionArray[0][1]
i = regionArray[0][0]
for line in regionArray:
last_i = i
i = line[0]
if i <= j:
if line[1] > j:
j = line[1]
else:
resultsContigs.append([last_i,j])
resultsContigs.append([i,regionArray[len(regionArray)-1][1]])
return resultsContigs
print findCoveredRegions(myarray)
对不起,我不明白这个问题,即使是这个例子。如果你发现很难用文字表达,那么你几乎可以肯定地发现很难将其写入代码。也许首先就是这样做的。 – Denziloe
您能否详细说明您的意思:1)“x和y值的最长连续跨度”2)“5768和6000之间的区域未被覆盖” –
想象一下,您将连续序列中的0到7262之间的所有数字。我们可以将我的例子中的每一行看作0到148,0到145等所有数字的字符串。 我想要生成的是0到7262之间的区域列表,其数目至少会出现一次,知道有些数字根本不会出现。 5768和6000之间的数字不是任何子序列的一部分,但0和5768以及6000和7262之间的所有数字至少被其中一个区域“覆盖”。 这有道理吗? – Sigurgeir