我正在尝试对二维列表进行排序,同时优先沿其中一个维度进行排序。
例子:
twod_list = [[116.2,103.4],[124.9,103.4],[129.5,103.4],
[144.6,103.4],[148.9,103.4],
[119.1,109.3],[125.9,103.4],[146.3,109.3],[135.8,103.4]]
我试图按以下顺序对其进行排序,首先沿第二个维度排序,然后沿第一个维度排序,同时保持第二个维度的顺序。所以我预期的排序列表如下所示
sorted_twod_list = [[116.2,103.4],[124.9,103.4],[125.9,103.4],[129.5,103.4],[135.8,103.4],
[144.6,103.4],[148.9,103.4],
[119.1,109.3],[146.3,109.3]]
我尝试先沿第二个维度排序,然后再沿第一个维度排序,但这样做会改变顺序。
twod_list = [[116.2,103.4],[124.9,103.4],[129.5,103.4],
[144.6,103.4],[148.9,103.4],
[119.1,109.3],[124.9,103.4],[146.3,109.3],[135.8,103.4]]
twod_sorted_on_y = sorted(twod_list,key=lambda l:l[1])
twod_sorted = sorted(twod_sorted_on_y,key=lambda l:l[0])
我得到以下结果:
twod_sorted = [[116.2, 103.4],[119.1, 109.3],[124.9, 103.4],
[124.9, 103.4],[129.5, 103.4],
[135.8, 103.4],[144.6, 103.4],[146.3, 109.3],[148.9,103.4]]
我们也可以使用 if 条件来完成此操作,但我想知道是否存在使用 numpy 或 pandas 的捷径?
最佳答案
您需要在同一个排序键中考虑这两个值。通常,Python 会按 [0]
值排序,然后按 [1]
值排序。我们可以通过创建一个反转值的键来利用它:
sorted(twod_list,key=lambda l:(l[1], l[0]))
现在Python会先根据key的[0]
排序,也就是原来的[1]
,然后再根据[ 1]
的key,也就是原来的[0]
关于python - 如何在优先考虑其中一个维度的同时对二维列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58502963/