2017-08-04 61 views
0

我有一個點列表,並且只有當它們之間的距離大於某個閾值時,我纔想保留點的列表。因此,從第一點開始,如果第一點和第二點之間的距離小於閾值,那麼我將移除第二點,然後計算第一點和第三點之間的距離。如果這個距離小於閾值,比較第一個和第四個點。否則移動到第三個和第四個之間的距離等等。如果兩點之間的距離低於某個閾值,從列表中刪除點

因此,舉例來說,如果閾值是2,我有

list = [1, 2, 5, 6, 10] 

那麼我希望

new_list = [1, 5, 10] 

謝謝!

回答

1

沒有看中一個內膽,但你可以迭代值的列表,並把它們添加到一些新的列表,如果當前值比在新的列表中的最後一個值越大,使用[-1]

lst = range(10) 
diff = 3 

new = [] 
for n in lst: 
    if not new or abs(n - new[-1]) >= diff: 
     new.append(n) 

之後,new[0, 3, 6, 9]


關於你的評論:「如果我不得不代替座標(x,y)的名單是什麼?」:在這種情況下,你做同樣的事情,不同的是,而不是僅僅比較數字,你必須找到兩點之間的Euclidean distance。因此,假設lst(x,y)對列表:

if not new or ((n[0]-new[-1][0])**2 + (n[1]-new[-1][1])**2)**.5 >= diff: 

或者,您可以將您(x,y)對轉換成數字complex。對於那些,基本操作,如加法,減法和絕對值已經定義,所以你可以再次使用上面的代碼。現在

lst = [complex(x,y) for x,y in lst] 

new = [] 
for n in lst: 
    if not new or abs(n - new[-1]) >= diff: # same as in the first version 
     new.append(n) 
print(new) 

new是代表點複數的列表:[0j, (3+3j), (6+6j), (9+9j)]

+0

謝謝你,它的工作原理。如果我有一個座標列表(x,y)怎麼辦?我將如何更改代碼? –

+0

@ S.sonia看我的編輯。 –

+0

非常感謝,非常有幫助! –