範囲のリストがパスと交差するかどうかを確認するために、次のメソッドを作成しました。別の言い方をすれば、範囲はネストされていません。
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を返し、2番目はtrueを返す必要があります。
check_ranges([(7,16),(6,17),(5,18),(4,19)])
check_ranges([(5,16),(6,17),(5,18),(4,19)])
現在のように動作しますが、実際には非効率のようです。これが一般的な問題である場合、またはより効率的な解決策がある場合、誰かが今いますか?