def mergeoverlapping(initialranges):
i = sorted(set([tuple(sorted(x)) for x in initialranges]))
f = [i[0]]
for c, d in i[1:]:
a, b = f[-1]
if c<=b<d:
f[-1] = a, d
elif b<c<d:
f.append((c,d))
else:
pass
return f
def main():
#open file for reading
list_of_Tups = []
with open("intervals.txt") as in_file:
for line in in_file:
int_list = [int(i) for i in line.split()]
line = int_list
list_of_Tups.append(line)
list_of_Tups.sort()
answer = list(mergeoverlapping(list_of_Tups))
print("Non-intersecting Intervals:")
for i in range (len(answer)):
print(answer[i])
main()
データファイルでは、タプルを作成し、タプルをリストに格納し、リストをソートし、オーバーラップするタプルの各ペアを1つのタプルに置き換える必要がありました。交差していないタプルのリストを印刷します。間隔のサイズの大きい順に非交差の間隔を印刷するにはどうすればよいですか?
しかし、ここでは、交差していない間隔を間隔のサイズの大きい順に印刷する方法を知りたいと思います。 2つの間隔が同じサイズの場合、下端の昇順に2つの間隔を印刷します。 ( :
非交差区間: (-4,3) (4,7) (10,15)の大きさの順に
非交差区間ので、出力は次のようになります。 4、7) (10、15) (-4、3)
[マージオーバーラッピングインターバルPython]の可能な複製(http://stackoverflow.com/questions/43600878/merging-overlapping-intervals-python) – Vallentin
興味深い。それは約1日前の質問と同じ間隔です。 – Vallentin
問題の最初の部分は同じです。しかし、交差しない区間をどのようにサイズ順に並べるかを知りたい。私はすでに持っているout_putを取って、各範囲ごとに別々のリストを作成し、リストの長さを数えますか?それを昇順で印刷しますか? – BingBing23