如何在使用 if 条件针对列表测试该项目时将项目附加到列表

How to append items to a list while testing that item against list with if conditions

如果列表包含在指定的多边形内,我将随机生成的点添加到列表中,直到我获得所需的点数:

def random_points_in_polygon(number, polygon):
    points = []
    min_x, min_y, max_x, max_y = polygon.bounds
    i= 0
    while i < number:
        point = Point(np.random.uniform(min_x, max_x), np.random.uniform(min_y, max_y))
        if polygon.contains(point):
            points.append(point)
            i += 1
    return points  # returns list of shapely point

# generate determined points within field polygon
points = random_points_in_polygon(pointscount, gdf.iloc[0].geometry)

不过,我想添加另一个 if 条件,根据先前添加到列表中的每个点不断测试每个新点。

我基本上需要添加一个距离测试来测试每个点与已经通过以下方式添加到列表中的点的最小距离:

for j in range(len(points)):
    distancetest = j.distance(point)
    if distancetest > 60:
       if polygon.contains(point)
            points.append(point)
            i += 1

如果新生成的点与之前已添加的每个点的距离超过一定距离,并且包含在多边形内,则该点将被添加到列表中。我发现自己陷入了一个无限循环,试图在我当前的代码中添加这个附加条件。我该怎么做?

您并没有测试所有的点,而是将距离超过 60 个单位的每个点添加到 points(除了 j 实际上不是 Point, 是列表​​中的索引).

使用all()函数从points的所有现有元素中测试是否大于60。

    while i < number:
        point = Point(np.random.uniform(min_x, max_x), np.random.uniform(min_y, max_y))
        if polygon.contains(point) and all(p.distance(point) > 60 for p in points):
            points.append(point)
            i += 1