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
.
Эти объекты "под капотом" допускают равенство между int
s и float
s путем определения подходящего __eq__
метод, который в конечном итоге используется, когда вы вызываете 0 == 0.0
.