如何在python中从多维列表的第一级删除None

2024-04-20 13:51:05 发布

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

我有一个这样的最终列表,请注意结尾的“无”,我正在尝试重新格式化它:

[array([[[18, 10, 10],
    [44, 38, 10]]], dtype=uint16), array([[[24, 32,  9]]], dtype=uint16), array([[[18, 12,  9]]], dtype=uint16), array([[[20, 34,  9]]], dtype=uint16), array([[[16, 12, 10]]], dtype=uint16), array([[[16, 12, 10]]], dtype=uint16), None]

这是函数直接产生的结果等长圆():

[[[18.5 10.5 10.3]]]

如果读取失败,它将返回

"None"    

这是OpenCV中Hough圆的输出。有时霍夫圆会输出一个“无”,我有一个检查,以防失败,但它不会停止无被读取。你知道吗

我无法得到一个检查工作正常,以阻止从附加或删除无。你知道吗

这是霍夫圆代码:

    def Hough_Circles(image,dp,minDist,param1,param2,minRadius,maxRadius):
    try:
        circles = cv.HoughCircles(image, cv.HOUGH_GRADIENT, dp, minDist,
                                param1=param1,
                                param2=param2,
                                minRadius=minRadius,
                                maxRadius=maxRadius)
        if(circles == None):
             #this is a keyword to keep it from appending later
             circles = "REMOVE ME"
        else:
            circles = np.uint16(np.around(circles))
    except:
        print("no circle found")
    return circles

我尝试了以下方法来检查并删除此项:

这是在np.uint16号()

if(circles[index] != None):
    # this is a good item


if(any(circles == None))
    # This is a bad item

这是以前试过的np.uint公司()

if(isinstance(circles,list):
    # This is a good item

if(circles == None):
    # this is a bad item

if(isinstance(circles,list)):
    # it says [[[18.5 10.5 10.3]]] is not a list
    circles = np.uint16(np.around(circles))
else:
    # this is all it reads
    circles = "BAD READ"

我试过在手术前把它取下来np.uint公司已添加,但没有帮助。你知道吗

我的问题几乎总是“NoneType是不可订阅的”或者“subscribable的truthvalue是不明确的”,这是有意义的。但是“isinstance”总是说列表不是列表,但是在python控制台上的同一个测试说它是列表。你知道吗


Tags: none列表ifisnpthisitemarray
1条回答
网友
1楼 · 发布于 2024-04-20 13:51:05

已解决

我不知道HoughCircles真的会以numpy.ndarray公司““

注意自己,一定要检查类型。你知道吗

    def Hough_Circles(image,dp,minDist,param1,param2,minRadius,maxRadius):
    #circles = []
    try:
        circles = cv.HoughCircles(image, cv.HOUGH_GRADIENT, dp, minDist,
                                param1=param1,
                                param2=param2,
                                minRadius=minRadius,
                                maxRadius=maxRadius)
        if(isinstance(circles,np.ndarray)):
            circles = np.uint16(np.around(circles))
        else:
            circles = [[["BAD READ"]]]
    except:
        print("no circle found")
    return circles

相关问题 更多 >