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