抱歉,这是一个琐碎的问题。如果我有清单:

inputlist = [(0,0), (_,_), (_,_), (0,0), (0,0), (_,_), (0,0)]


什么是一种有效的排序方式,以使所有非零元素都集中在左侧(以任何顺序排列):

sortlist = [(_,_), (_,_), (_,_), (0,0), (0,0), (0,0), (0,0)]

最佳答案

使用返回小于零的任意值(例如-1 vs. 0)的键:

sorted(inputlist, key=lambda t: -1 if t != (0, 0) else 0)


可以简化为:

sorted(inputlist, key=lambda t: t == (0, 0))


因为FalseTrue之前排序

演示:

>>> 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/

10-12 20:15