在列表python中追加零但不是False

Dan*_*ett 6 python list

我试图将列表中的所有零移动到行的后面,我唯一的问题是列表中有一个假布尔值.我刚刚发现False == 0,那么如何将所有零移动到列表的后面并保持完整的虚假?

def move_zeros(array):
    #your code here
    for i in array:
        if i == 0:
            array.remove(i)
            array.append(i)
    answer = array
    print answer
Run Code Online (Sandbox Code Playgroud)

move_zeros(["a",0,0,"b",None,"c","d",0,1,False,0,1,0,3,[],0,1,9,0,0,{},0,0,9])

这是它运行时返回的内容.

['a', 'b', None, 'c', 'd', 1, 1, 3, [], 1, 9, {}, 9, 0, 0, 0, 0, 0, False, 0, 0, False, 0, 0]
Run Code Online (Sandbox Code Playgroud)

Joh*_*nck 8

你正在做的基本上是一种自定义排序.所以只需这样实现:

array.sort(key=lambda item: item is 0)
Run Code Online (Sandbox Code Playgroud)

这意味着"将数组转换为布尔值,其中0的项为True,其他所有项都为False." 然后,对这些布尔值进行排序会将所有False值放在左侧(因为它们类似于0),并将右侧的True值放入(如1).


最初我编写了一个Python 3不支持的解决方案:

array.sort(lambda L,R: -1 if R is 0 else 0)
Run Code Online (Sandbox Code Playgroud)

这意味着"如果R为0,则L小于R".然后我们按照那个排序.所以我们最终得到右边的任何零,因为任何东西都比他们少.但是,上述仅适用于Python 2.


jbs*_*u32 0

for i in array:
    if i == 0 and i is not false:
        array.remove(i)
        array.append(i)
answer = array
print answer
Run Code Online (Sandbox Code Playgroud)