提问者:小点点

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] should equal [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无法实现此功能:

检查对象是否确实引用了同一个对象。 在python中,所有数字都是对象,但0int对象不同于0.0float对象。

在“hood”下,通过定义适当的__eq_方法,这些对象允许ints和floats之间的相等性,当您调用0==0.0时,最终将使用该方法。