CodeWars Kata将零移动到列表末尾

时间:2020-07-07 14:34:08

标签: python algorithm katacoda

伙计们,所以我几乎解决了这个问题,但是我的代码一直未能通过这一测试。有什么想法吗?

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 个答案:

答案 0 :(得分:1)

比较数字时不要使用is not。这不是预期的用法。而是使用==比较运算符。

isis not或用于比较实际对象而不是文字。

答案 1 :(得分:1)

深入研究为什么由于使用is而无法工作的原因:

is检查对象在字面上是否引用了同一对象。所有数字都是python中的对象,但int的{​​{1}}对象与0的{​​{1}}对象不同。

在“引擎盖”下,这些对象通过定义适当的float方法来实现0.0int之间的相等,该方法最终是您调用{{1 }}。