在python中按块排序列表

时间:2017-07-12 09:18:00

标签: python-3.x sorting

我有一个按x坐标排序的2D点列表。例如

l=[(1,2),(2,1),(4,2),(5,1),(6,7),(7,2)]

现在我想用y坐标对这个列表进行排序,但是,我们只说每三个元素。

这意味着

l=[(2,1),(1,2),(4,2),(5,1),(7,2),(6,7)]

我找不到这样的东西:

list.sort(startIndex,EndIndex, comparator)

在python中是这样的,或者我的问题是否有任何优雅的解决方案?

1 个答案:

答案 0 :(得分:1)

您可以将sort和itertools.chain结合起来

from operator import itemgetter
from itertools import chain
l=[(1,2),(2,1),(4,2),(5,1),(6,7),(7,2)]
list(chain.from_iterable(sorted(l[i:i+3], key=itemgetter(1)) for i in range(0, len(l), 3)))

使用列表理解,您甚至可以避免使用链:

[x for y in (sorted(l[i:i+3], key=itemgetter(1)) for i in range(0, len(l), 3)) for x in y]