Array.count(0) и Array.remove(0) считают False как 0, как игнорировать False

Нужно сдивнуть все 0ли в конец списка, но не работает если в списке есть False

def move_zeros(array):
    a = array.count(0)
    for i in range(a):array.remove(0)           
    for i in range(a):array.append(0)
    return array 

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

Ответы (1 шт):

Автор решения: strawdog
def move_zeros(array):
    arr = [x for x in array if x is not 0]
    zeros = [x for x in array if x is 0]
    arr.extend(zeros)
    return arr

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

UPDATE

Если вдруг возникнет необходимость работать с разными типами числа 0, то можно сделать более громоздкую конструкцию:

def move_zeros(array):
    arr = [x for x in array if isinstance(x, bool) or x != 0]
    zeros = [x for x in array if not isinstance(x, bool) and (x == 0.0)]
    arr.extend(zeros)
    return arr

print(move_zeros(np.array([9,0.0,None, False, 0,9,1,2,0,1,0,1,0.0,3,0,1,9,0,0,0,0,9, False])))

# [9, None, False, 9, 1, 2, 1, 1, 3, 1, 9, 9, False, 0.0, 0, 0, 0, 0.0, 0, 0, 0, 0, 0]
→ Ссылка