沒有看中一個內膽,但你可以迭代值的列表,並把它們添加到一些新的列表,如果當前值比在新的列表中的最後一個值越大,使用[-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)]
謝謝你,它的工作原理。如果我有一個座標列表(x,y)怎麼辦?我將如何更改代碼? –
@ S.sonia看我的編輯。 –
非常感謝,非常有幫助! –