检查列表是否不包含lis

2024-06-11 09:22:06 发布

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

首先,对不起,如果这实际上是一个重复-我花了三个小时试图解决这个问题,并没有找到任何解决办法。在

问题

我使用列表来表示坐标[x, y]。我想知道坐标列表是否不包含指定的坐标。{{cd2>的坐标列表{I}不存在于cd2}的列表中。在

值得注意的是,坐标列表是使用OpenCV函数cv2.findContours()cv2.minAreaRect()和最后的cv2.boxPoints()生成列表的。这些坐标存储在dict中并从那里访问;调用坐标的print()给我的坐标格式是[array([3.3, 4.4], dtype=float32), array([5.5, 6.6], dtype=float32)],而不是{}格式,我用print()找到坐标后直接给出cv2.boxPoints()。在

我试过的

我试图使用this question的答案,但是我得到了错误ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()。在

该尝试的代码如下所示:

for coordinate in box:
    if coordinate not in specialCoordinates:
        # operations go here

然后我试图使用this question about a.all()的答案,但是我得到了相同的错误。在

该尝试的代码如下所示:

^{pr2}$

我也试过了:

for coordinate in box:
    if all(coordinate != special for special in specialCoordinates):
        # operations go here

附加信息

当我在Python2.7解释器中尝试以下操作时,上面提到的格式if coordinate not in specialCoordinates起作用:

Python 2.7.15(v2.7.15:ca079a3ea3,2018年4月30日,16:30:26)[MSC v.1500 64位(AMD64)]

键入“帮助”、“版权”、“信用证”或“许可证”以获取更多信息。在

>>a=[[3.3,4.4],[5.5,6.6]]

>>>b=[1.1,2.2]

>>>b不在a中

是的


Tags: incoordinate列表forif格式allarray
2条回答
import numpy as np
#a = [array([3.3, 4.4]), array([5.5, 6.6])]
a = np.array([i.tolist() for i in a])

def if_not_in_a(A, B):
    for i in A:
        if np.linalg.norm(i - B) == 0: 
        #you can use tolerance like < 1e-2 to avoid floating point complicacy
            return False
    return True

print(if_not_in_a(a, np.array([1.1, 2.2])))
#prints True

print(if_not_in_a(a, np.array([3.3, 4.4])))
#prints False

这里的主要问题是列表中的numpy数组元素具有与其相关联的精度,例如: a = [np.array([3.3, 4.4], dtype='float32'), np.array([5.5, 6.6], dtype='float32')] 相当于: [array([ 3.29999995, 4.4000001 ], dtype=float32), array([ 5.5 , 6.5999999], dtype=float32)]

因此,如果你在a中寻找[3.3,4.4],它就不存在了,所以你可能想玩一下精度或做一些铸造。在

相关问题 更多 >