Skip to main content
 首页 » 编程设计

python之将所有零移动到列表的末尾,同时单独留下 False

2025年05月04日26lexus

假设我有一个列表:[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]