Python中的全局和局部范围变量;从循环内的数组中删除内部项

Python中的全局和局部范围变量;从循环内的数组中删除内部项,python,arrays,variables,scope,Python,Arrays,Variables,Scope,代码如下: def deleteObj(array): for i in range (0, len(array)): if array[i]: if type(array[i]) == int or type(array[i]) == float: if int(array[i]) == 0: del array[i] elif not array[i]:

代码如下:

def deleteObj(array):
    for i in range (0, len(array)):
        if array[i]:
            if type(array[i]) == int or type(array[i]) == float:
                if int(array[i]) == 0:
                    del array[i]
        elif not array[i]:
            break

    print(array)
所以,在最后,它会毫无变化地打印整个阵列。我已经心碎了xd
另外,在发布内部函数之前,我无法将数组设置为全局变量

您有两个问题:

  • 如果数组[i]:
    数组[i]
    None
    时,以及在
    0
    时,将为false
  • 当您在
    数组上进行迭代时,将从该数组中删除,这将导致迭代
    列表索引超出范围
  • 您需要明确检查项目是否为
    None
    ,并在
    array
    的副本上使用
    remove
    ,以便删除项目。您还可以跳过对
    int
    float
    的检查,以及对
    int
    的转换,它们不是必需的

    def deleteObj(array):
        for item in list(array):
            if item is not None:
                if item == 0:
                    array.remove(item)
            else:
                break
    
        print(array)
    

    你能帮我再做一个吗?直到问题冷却。我有代码:array.sort(key=lambda item:item是0)\n排序(array,key=lambda x:(x==0)并且x不是False)\n输入列表是[“a”,0.0,0,“b”,None,“c”,“d”,0,1,False,0,1,0,3,[],0,1,9,0,0,{},0,0,9]\n所以它在第一次尝试后立即返回,但对float没有任何作用