首页 > 解决方案 > 如何不将 False/其他值评估为 0

问题描述

def move_zeros(array):
    no_zero = [i for i in list(array) if i != int(0)]
    print(array)
    print(no_zero)

    for i in range(array.count(0)):
        no_zero.append(0)

    return no_zero

这是我用于 codeacademy kata 的代码,其目的是将列表数组中的所有零移动到数组的前面。我的代码在大多数情况下都可以工作,但是在某些情况下代码会卡住,例如它将 False 视为零以及诸如 0.0 之类的值,我如何更改它以使其影响文字数字 0

编辑:被问到例如预期算法的输出

move_zeros([false,1,0,1,2,0,1,3,"a"]) 
returns[false,1,1,2,1,3,"a",0,0]

而我的代码返回

[1, 1, 2, 1, 3, 'a', 0, 0, 0]

标签: pythonarraysloops

解决方案


False真的是0,因为bool是一个子类int

该值False是一个单例,因此您始终可以检查if i is False以将其与 0 区分开来。

整数0也是一个单例,但这是一个实现细节,而不是语言的保证。我宁愿不依赖它。

要排除该float0.0,您始终可以测试确切的类型:if type(i) is int. 的子类int将无法通过此测试。


推荐阅读