如何对 x-y 坐标列表进行排序

问题描述 投票:0回答:3

我需要对

[x,y]
坐标列表进行排序,如下所示:

list = [[1,2],[0,2],[2,1],[1,1],[2,2],[2,0],[0,1],[1,0],[0,0]]

排序后我要寻找的模式是:

[x,y]
坐标应先按
y
排序,然后按
x
排序。新列表应如下所示:

list = [[0,0],[1,0],[2,0],[0,1],[1,1],[2,1],[0,2],[1,2],[2,2]]

我不知道该怎么做,希望得到一些帮助。

python sorting
3个回答
55
投票

使用

sorted
与钥匙:

>>> my_list = [[1,2],[0,2],[2,1],[1,1],[2,2],[2,0],[0,1],[1,0],[0,0]]
>>> sorted(my_list , key=lambda k: [k[1], k[0]])
[[0, 0], [1, 0], [2, 0], [0, 1], [1, 1], [2, 1], [0, 2], [1, 2], [2, 2]]

它将首先对 y 值进行排序,如果相等,那么它将对 x 值进行排序。

我还建议不要使用

list
作为变量,因为它是内置数据结构


0
投票

您可以在排序之前将列表转换为 pandas 数据框,因为 pandas 提供了许多内置函数来处理 df。与列表相比,您将有更多选择

>>> import pandas as pd
>>> list = [[1,2],[0,2],[2,1],[1,1],[2,2],[2,0],[0,1],[1,0],[0,0]]
>>> df = pd.DataFrame(list, columns=['x','y'])
>>> df_sorted = df.sort_values(by=['y', 'x'])
>>> df_sorted
   x  y
8  0  0
7  1  0
5  2  0
6  0  1
3  1  1
2  2  1
1  0  2
0  1  2
4  2  2

-3
投票

定义虚拟索引 Z = (X+Y) 现在对 Z 执行快速排序并基于索引 Z 选取元素 (X, Y)。圆上的点将导致相同的 Z(并且显然会在排序结果中粘在一起)

© www.soinside.com 2019 - 2024. All rights reserved.