for循环省略了一些列表元素

2024-10-02 06:27:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我要做的是创建一个圆,然后删除该圆中所有超出给定键的(整数)点(例如圆和某些几何图形的面积相交)。几何图形表示为(x,y)元组的列表,圆也是如此(附加的O变量等于其中心)。我的密码是:

copy=circle
for bound in bounds:
    for point in circle:
        if checkPointSegmentIntersection(O,point,bound):
            copy.remove(point)
        print bound, point
print copy

我测试的圆心现在等于(5,8),半径等于3。圆的一个边界点是(5,11),边界上有一个点等于(5,10)。所以点(5,11)和{}应该从copy中删除。(5,10)有,但是{}没有。而且,这对(5,10) (5,11)甚至没有出现在输出中,(5,10) (5,10)却出现了)!内部循环继续使用绑定相等(5,10)(5,11)是唯一省略的点。(5,11)确实出现在其他外循环迭代中。发生什么事?什么会导致循环忽略其中一个点?在

一点背景知识:这段代码在django服务器上执行,bounds列表相当大,它包含10-15个元素,我使用的是python2.7。如果checkPointSegmentIntersection(A,B,X)A和{}之间的线段上,checkPointSegmentIntersection(A,B,X)函数工作并返回{}。我也愿意接受任何不同的方法来解决手头的问题。在

谢谢!在


Tags: in密码列表for整数中心point元组
2条回答

当你认为你在创建列表的副本时,你只是在创建对同一内存空间的另一个引用。相反,您应该使用

circ_copy=circle[:]

这实际上是获取整个circle的副本,并将其作为一个新列表存储在circ_copy中。现在你可以运行你的循环。但是,您的意图是完全正确的,尝试遍历复制列表并对原始列表进行更改。在

把事物分开,这样你就有了一个函数

checkPointSegmentIntersection(point, bounds)

对当前边界的点返回True或{}。在

然后你可以做一些类似的事情

^{pr2}$

相关问题 更多 >

    热门问题