将所有零移动到列表的末尾,同时不保留False


问题内容

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

我知道我可以使用:

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

但它也会移到False列表的末尾,这不是我想要的。

如何仅移动零但将False值保留在其原始位置?


问题答案:

因为bool是的子类int并且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]