在嵌套循环中使用枚举 [Python]

Using enumerate in nested loops [Python]

我有一个包含 (x, y, z) 的三元组列表 points,其中 x 是 x 坐标,y 是 y 坐标,z 是量级。现在我想检查列表中的任何点是否在列表中其他点的特定半径范围内。如果是这样,则必须删除半径中的点。因此我编写了以下代码。

radius = 20
for _, current_point in enumerate(points):
    # get the x and y coordinate of the current point
    current_x, current_y = current_point[0], current_point[1]
    for _, elem in enumerate(points):
        # check if the second point is within the radius of the first point
        if (elem[0] - current_x)**2 + (elem[1] - current_y)**2 < radius**2:
            # remove the point if its within the radius
            points.remove(elem)

当我运行这个列表仍然包含在另一个点的半径内的点。 enumerate 中有我遗漏的 属性 吗?

您可以迭代构建包含满足条件的点的新列表。

radius = 20
spread_points = []
for point in points:
    # get the x and y coordinate of the current point
    current_x, current_y = point[0], point[1]
    for sp in spread_points:
        # check if the second point is within the radius of the first point
        if (sp[0] - current_x)**2 + (sp[1] - current_y)**2 < radius**2:
            break
    else:
        spread_points.append(point)

为了更高效的算法,也许你可以使用https://en.wikipedia.org/wiki/Quadtree

或者为了加快速度,您可以使用 numpy 数组来加速一点到多点的距离计算。