gpt4 book ai didi

python - 如果两点之间的距离低于某个阈值,则从列表中删除点

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:37 24 4
gpt4 key购买 nike

我有一个点列表,只有当它们之间的距离大于某个阈值时,我才想保留列表中的点。因此,从第一个点开始,如果第一个点和第二个点之间的距离小于阈值,那么我将删除第二个点,然后计算第一个点和第三个点之间的距离。如果该距离小于阈值,则比较第一点和第四点。否则移动到第三个和第四个之间的距离,依此类推。

例如,如果阈值是 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)]

关于python - 如果两点之间的距离低于某个阈值,则从列表中删除点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45515764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com