将所有零移动到列表的末尾(找不到0.0的解决方案)

时间:2017-02-12 11:38:17

标签: python sorting type-conversion

假设我有一个列表:[9,0.0,0,9,1,2,0,1,0,1,0.0,3,0,1,9,0,0,0,0,9,False],我想将所有零移到最后。

这是我的代码:

def move_zeros(array):
    new = [int(x) if x is 0.0 else x for x in array ]
    new.sort(key=lambda item: item is 0)
    return new 

int(x)不适用于0.0而没有第二行,我无法将0.0移至最后。你能帮我找一下0.0的解决方案吗?

EDITED

我通过将False发送到列表

来更新原始帖子

1 个答案:

答案 0 :(得分:5)

由于boolint的子类,而False == 0是True(事实上,sorted key函数的成功取决于此),如果您希望将False视为非零,那么您需要将其添加为另一个条件:

sorted([9,0.0,0,9,1,2,0,1,0,1,0.0,3,0,1,9,0,0,0,0,9,False], 
       key=lambda x: (x == 0) and x is not False)

产量

[9, 9, 1, 2, 1, 1, 3, 1, 9, 9, False, 0.0, 0, 0, 0, 0.0, 0, 0, 0, 0, 0]