首页 > 解决方案 > 如何忽略False,所以不算为0

问题描述

有没有办法让 0 与 False 不一样?因为我一直得到错误的结果,我还找不到解决方案。

def move_zeros(array):    
    a = 0
    for i in array:
        if array[a] == 0:
            array.remove(array[a])
            array.append(0)
            a +=1
        else:
            a += 1         
    return array    

print(move_zeros([0,1,None,2,False,1,0]))

输入数组:

[0,1,None,2,False,1,0]

预期输出:

[1,None,2,False,1,0,0]

实际输出:

[1, None, 2, 1, 0, 0, 0]

标签: python

解决方案


Boolean 类型继承自 int 类型,因此 False 为 0,但类型不同。这意味着您可以通过类型检查区分 0 和 False。False 和 bool,因此是 int,但 0 不是 bool。

此外,.remove删除等于该值的第一个值,因此即使进行此检查,代码也不起作用。;) 无论 的值如何,它都取了第一个 0,a所以它也抓取了 False。让我们使用del

def move_zeros(array):    
    a = 0
    for i in array:
        if array[a] == 0 and not isinstance(array[a], bool):
            del array[a]
            array.append(0)
            # a +=1 if you remove an element, next one jumps in its place, so you have to check the same index
        else:
            a += 1         
    return array    

print(move_zeros([0,1,None,2,False,1,0]))

输出:

[1, None, 2, False, 1, 0, 0]

推荐阅读