将所有零移动到列表的末尾,同时不保留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]