抱歉,如果这是一个微不足道的问题。如果我有一个列表:
inputlist = [(0,0), (_,_), (_,_), (0,0), (0,0), (_,_), (0,0)]
什么是一种有效的排序方式,以便所有非零元素都集中在左侧(以任何顺序):
sortlist = [(_,_), (_,_), (_,_), (0,0), (0,0), (0,0), (0,0)]
最佳答案
使用为任何非零值返回较低值的键,例如 -1
与 0
:
sorted(inputlist, key=lambda t: -1 if t != (0, 0) else 0)
这可以简化为:
sorted(inputlist, key=lambda t: t == (0, 0))
因为 False
排在 True
之前
演示:
>>> import random
>>> r = lambda: random.randint(1, 10)
>>> inputlist = [(0,0), (r(),r()), (r(),r()), (0,0), (0,0), (r(),r()), (0,0)]
>>> sorted(inputlist, key=lambda t: t == (0, 0))
[(4, 5), (3, 2), (3, 3), (0, 0), (0, 0), (0, 0), (0, 0)]
所有非零元组都保持原来的顺序,只是移到输出列表的前面。
关于python - 对于 Python,如何对固定大小的列表中的元素进行排序和合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21138492/