2017-08-04 56 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

非常感谢,非常有帮助! –