【问题标题】:How to sort a list of x-y coordinates [closed]如何对x-y坐标列表进行排序[关闭]
【发布时间】:2016-05-09 18:17:40
【问题描述】:

我需要对如下所示的[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 中排序坐标”,这是最好的结果。
  • 这里也没有更快更清晰的答案。这将是my_list = np.array(list) ind = np.lexsort((my_list[:,1], mylist[:,0])) sorted = my_list[ind]

标签: python sorting


【解决方案1】:

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 用作变量,因为它是built-in data structure

【讨论】:

  • 没问题。不错的答案!
  • 很酷,但是如果我想 1) 按 y 排序 2@ 按 x 排序,如何做到这一点?
  • my_updated_list = sorted(my_list , key=lambda k: [k[1], k[0]]),您必须将其分配给新变量。
  • @LipingHuang 这正是这个方法的作用。见安蒂的评论。如果您想反过来,请将 k[1] 与 k[0] 交换。
【解决方案2】:

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

【讨论】:

  • 这行不通,因为坐标 (3,11)(11,3) 会给你相同的 Z,而实际上它们是非常不同的点
猜你喜欢
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 2011-10-23
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
相关资源
最近更新 更多