如果两点之间的距离低于某个阈值,从列表中删除点
问题描述:
我有一个点列表,并且只有当它们之间的距离大于某个阈值时,我才想保留点的列表。因此,从第一点开始,如果第一点和第二点之间的距离小于阈值,那么我将移除第二点,然后计算第一点和第三点之间的距离。如果这个距离小于阈值,比较第一个和第四个点。否则移动到第三个和第四个之间的距离等等。如果两点之间的距离低于某个阈值,从列表中删除点
因此,举例来说,如果阈值是2,我有
list = [1, 2, 5, 6, 10]
那么我希望
new_list = [1, 5, 10]
谢谢!
答
没有看中一个内胆,但你可以迭代值的列表,并把它们添加到一些新的列表,如果当前值比在新的列表中的最后一个值越大,使用[-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看我的编辑。 –
非常感谢,非常有帮助! –