Python 为什么在尝试从列表中删除数组时会出现此错误?

Python 为什么在尝试从列表中删除数组时会出现此错误?,python,arrays,Python,Arrays,我有一个列表,每个元素都是数组的数组。大概是这样的: contourList = [ [ [x0,y0],[x1,y1]...] ,[ [x2,y2],[x3,y3] ]...] 每个列表元素是一个坐标数组,表示x-y维度的轮廓,每个坐标是一个长度为2的数组,表示x,y值 现在我想检查这个列表中是否存在一个给定的轮廓“数组数组”,如果是,那么将其删除。当我这样做时,我会得到一个错误: 轮廓列表。删除(轮廓) ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all

我有一个列表,每个元素都是数组的数组。大概是这样的:

contourList = [  [ [x0,y0],[x1,y1]...] ,[ [x2,y2],[x3,y3] ]...]
每个列表元素是一个坐标数组,表示x-y维度的轮廓,每个坐标是一个长度为2的数组,表示x,y值

现在我想检查这个列表中是否存在一个给定的轮廓“数组数组”,如果是,那么将其删除。当我这样做时,我会得到一个错误:

轮廓列表。删除(轮廓)
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
代码如下:

for contour in contourList:
    if equalCoords(contour, mycontour):
        contourList.remove(contour)
我使用“EqualOrds”方法检查两个轮廓是否相同。它是:

def equalCoords(contourA,contourB):
    if len(contourA)!=len(cylinderB):
        return False
    else:
        for contourCoordA,contourCoordB in zip(contourA,contourB):
            if contourCoordA[0]!=contourCoordB[0] or contourCoordA[1]!=contourCoordB[1]:
                return False
    return True
以下是一个轮廓示例:

[[240.0696526413]
[ 241.          412.31021016]
[ 241.57079161  412.        ]
[ 242.          411.77849971]
[ 243.          411.41933059]
[ 244.          411.21092001]
[ 245.          411.13343726]
[ 246.          411.1804759 ]
[ 247.          411.35514159]
[ 248.          411.6721164 ]
[ 248.68715031  412.        ]
[ 249.          412.15537894]
[ 250.          412.82438379]
[ 250.20954831  413.        ]]
代码运行良好,成功地删除了一些轮廓,但在一些迭代之后,它停止并给出了我上面提到的错误


如果我的问题不够清楚,请告诉我。

我想问题是当你删除它时,它会查找与
轮廓线
相等的项目,但是
轮廓线
是一个列表,它会在内部检查是否导致此错误的
列表1==list2
。因此你可以使用
弹出
,或者使用列表压缩母鸡

你可以做:

i = 0
while i < len(contourList):
  if equalCoords(contourList[i], mycontour):
    contourList.pop(i)
  else:
    i += 1
或:


您不应该从正在迭代的列表中删除元素。您可以使用列表理解。例如,请参阅。
contourList = [c for c in contourList if not equalCoords(c, mycontour)]
contourList = filter(lambda c: not equalCoords(c, mycontour), contourList)