CodeWars Kata Перенести нули в конец списка

Привет, ребята, я почти решил эту ката, но мой код продолжает проваливать этот тест. Любые идеи?

def move_zeros(array):
    n = len(array)
    count = 0
    
    for i in range(n):
        if array[i] is not 0:    
            if type(array[i]) != int or type(array[i]) != float:
                array[count] = array[i]
                count += 1
            else:
                array[count] = array[i]
                count += 1
            
    while count < n:
        array[count] = 0
        count += 1
    return array

Это неудавшийся тест:

[9, 0.0, 9, 1, 2, 1, 1, 0.0, 3, 1, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0] должен равняться [9, 9, 1, 2, 1, 1, 3, 1, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0].

Я предполагаю, что это значение с плавающей запятой отбрасывает его, поэтому я пытаюсь учесть его с помощью второго оператора if, но безрезультатно.

2 ответа

Не используйте is notпри сравнении номеров. Это не предполагаемое использование. Вместо этого используйте== оператор сравнения.

is а также is not или используется для сравнения реальных объектов, а не литералов.

Погружение глубже в то, почему это не сработает из-за использования:

isпроверяет, что объекты буквально относятся к одному и тому же объекту. Все числа являются объектами в Python, ноint объект для 0 отличается от float объект для 0.0.

Эти объекты "под капотом" допускают равенство между ints и floats путем определения подходящего __eq__ метод, который в конечном итоге используется, когда вы вызываете 0 == 0.0.

Другие вопросы по тегам