ОК, так что вам нужно сначала отсортировать по startX, а затем по startY, соблюдая при этом относительный порядок между элементами в startX. Это будет выглядеть так:
# Input:
[[ 27, 22, 84 , 54],
[261 ,127 ,294 ,163],
[224 , 21 ,279 , 54],
[ 45 ,83 , 96 ,111],
[ 10 ,126 , 66 ,163],
[189 ,185 ,219 ,222],
[154 , 21 ,192 , 59],
[278 , 25 ,318 , 58],
[146 ,188 ,186, 220]]
# First sort:
[[ 10 ,126 , 66 ,163],
[ 27, 22, 84 , 54],
[ 45 ,83 , 96 ,111],
[146 ,188 ,186, 220],
[154 , 21 ,192 , 59],
[189 ,185 ,219 ,222],
[224 , 21 ,279 , 54],
[261 ,127 ,294 ,163],
[278 , 25 ,318 , 58]]
# Second sort:
[[154 , 21 ,192 , 59],
[224 , 21 ,279 , 54],
[ 27, 22, 84 , 54],
[278 , 25 ,318 , 58],
[ 45 ,83 , 96 ,111],
[ 10 ,126 , 66 ,163],
[261 ,127 ,294 ,163],
[146 ,188 ,186, 220],
[189 ,185 ,219 ,222]]
Это то, что называется стабильной сортировкой. Теперь, согласно стандартной справочной библиотеке , функция sorted
реализует стабильную сортировку.