How to sort a list of x-y coordinates
Question:
I need to sort a list of [x,y]
coordinates that looks like this:
list = [[1,2],[0,2],[2,1],[1,1],[2,2],[2,0],[0,1],[1,0],[0,0]]
The pattern I’m looking for after sorting is:
[x,y]
coordinate shall be sorted by y
first and then by x
. The new list should look like:
list = [[0,0],[1,0],[2,0],[0,1],[1,1],[2,1],[0,2],[1,2],[2,2]]
I can’t figure out how to do it and would appreciate some help.
Answers:
use sorted
with key:
>>> 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]]
It will first sort on the y value and if that’s equal then it will sort on the x value.
I would also advise to not use list
as a variable because it is a built-in data structure.
Define a virtual index Z = (X+Y) now perform quick sort on Z and based on index Z pick elements (X, Y). Points on circle will lead to same Z (and obviously will stick together in sort results)
I need to sort a list of [x,y]
coordinates that looks like this:
list = [[1,2],[0,2],[2,1],[1,1],[2,2],[2,0],[0,1],[1,0],[0,0]]
The pattern I’m looking for after sorting is:
[x,y]
coordinate shall be sorted by y
first and then by x
. The new list should look like:
list = [[0,0],[1,0],[2,0],[0,1],[1,1],[2,1],[0,2],[1,2],[2,2]]
I can’t figure out how to do it and would appreciate some help.
use sorted
with key:
>>> 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]]
It will first sort on the y value and if that’s equal then it will sort on the x value.
I would also advise to not use list
as a variable because it is a built-in data structure.
Define a virtual index Z = (X+Y) now perform quick sort on Z and based on index Z pick elements (X, Y). Points on circle will lead to same Z (and obviously will stick together in sort results)