Python 基于行的坐标排序列表
我正试图以一种特定的方式排列一组坐标 如果我有一组尚未排序的坐标,表示某个网格中的不同单元格Python 基于行的坐标排序列表,python,Python,我正试图以一种特定的方式排列一组坐标 如果我有一组尚未排序的坐标,表示某个网格中的不同单元格 {(2, 2), (3, 1), (1, 2), (3, 2), (1, 3)} 我的目标是从下一行开始从左到右排序 schematic of coordinates 0 1 2 3 4 0 X X X X X 1 X X O O X 2 X X O X X 3 X O O X X {(3, 1), (3, 2), (2, 2), (1, 2), (1, 3)} # desired out
{(2, 2), (3, 1), (1, 2), (3, 2), (1, 3)}
我的目标是从下一行开始从左到右排序
schematic of coordinates
0 1 2 3 4
0 X X X X X
1 X X O O X
2 X X O X X
3 X O O X X
{(3, 1), (3, 2), (2, 2), (1, 2), (1, 3)} # desired output
我提出了下面的代码,但是如果行数相同,列数不同,那么这将失败
data = {(1, 2), (1, 4), (2, 2), (0, 3), (0, 4)}
data_1 = sorted(data, key=lambda x: x[0], reverse=True)
data_2 = sorted(data_1, key=lambda x: x[1])
>>> print(data_2)
[(2, 2), (1, 2), (0, 3), (1, 4), (0, 4)]
# desired output
[(2, 2), (1, 2), (1, 4), (0, 3), (0, 4)]
我能做些什么改进?
data = {(1, 2), (1, 4), (2, 2), (0, 3), (0, 4)}
sorted(data, key=lambda x:(-x[0],x[1]))
#[(2, 2), (1, 2), (1, 4), (0, 3), (0, 4)]
def排序(项目):
对于范围内的i(长度(项目)-1,0,-1):
对于范围(i)中的j:
如果项目[j][0]<项目[j+1][0]:
项目[j],项目[j+1]=项目[j+1],项目[j]
持续
如果项目[j][0]==项目[j+1][0]和项目[j][1]>项目[j+1][1]:
项目[j],项目[j+1]=项目[j+1],项目[j]
退货项目
数据=[(1,2)、(1,4)、(2,2)、(0,3)、(0,4)]
打印(已排序(数据))