我編寫了以下方法來檢查範圍列表是否跨越路徑。另一種說法是,範圍不是嵌套的。檢查範圍是否跨越路徑
def check_ranges(lst):
for i in range(len(lst)):
for j in range(i+1,len(lst)):
# (a,b) and (x,y) are being compared
a = lst[i][0]
b = lst[i][1]
x = lst[j][0]
y = lst[j][1]
#both of these conditions mean that they cross
if x < a and b > y:
return True
if x > a and b < y:
return True
return False
第一個應該返回false,第二個true。
check_ranges([(7,16),(6,17),(5,18),(4,19)])
check_ranges([(5,16),(6,17),(5,18),(4,19)])
它的工作原理與現在一樣,但看起來效率很低。如果這是一個常見問題,或者是否有更高效的解決方案,現在是否有人?
我不知道我理解你想要的結果。爲什麼第一個失敗? '(7,16)'是'(6,17)'的一個子集。它應該是爲了?每個連續範圍應該是前一個超集嗎? – jdi