按行排序的坐标列表

时间:2018-11-16 05:20:28

标签: python

我正在尝试以特定方式订购一组坐标

如果我有一组尚待排序的坐标,它们代表某个网格中的不同单元格,

List<Integer> list = Collections.nCopies(5,0);

我的目标是从底部开始从左到右排序。

{(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

我可以做些什么改善?

2 个答案:

答案 0 :(得分:1)

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)]

答案 1 :(得分:1)

def sorted(items):
	for i in range(len(items)-1, 0 , -1):
		for j in range(i):
			if items[j][0] < items[j+1][0]:
				items[j], items[j+1] = items[j+1], items[j]
				continue
			if items[j][0] == items[j+1][0] and items[j][1] > items[j+1][1]:
				items[j], items[j+1] = items[j+1], items[j]
	return items


data = [(1, 2), (1, 4), (2, 2), (0, 3), (0, 4)] 
print(sorted(data))