如何不将False /其他值评估为0

时间:2018-11-16 03:52:32

标签: python arrays loops

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

这是我用于代码学院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]

2 个答案:

答案 0 :(得分:3)

False实际上是0,因为boolint的子类。

尽管值False是单例的,所以您始终可以选中if i is False来将其与0区分。

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

也要排除float0.0,则可以始终测试确切的类型:if type(i) is intint的子类将通过此测试。

答案 1 :(得分:0)

修改

def move_zeros(array):
    result = array[:]
    # add here any false value you want
    false_values = [0, 0.0, "0", "0.0", False, ""]
    for i in result:
        if i in false_values:
            result.append(i)  # or "0" or "0.0"
            del result[result.index(i)]
    return result