Sat*_*h K 3 python sorting numpy list pandas
我正在尝试对二维列表进行排序,同时优先考虑对其中一个维度进行排序。
例:
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]]
Run Code Online (Sandbox Code Playgroud)
我试图按以下顺序对此进行排序,首先沿第二维排序,然后沿第一维排序,同时保持第二维的顺序。所以我的预期排序列表如下所示
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]]
Run Code Online (Sandbox Code Playgroud)
我尝试先沿第二维排序,然后再按第一维排序,但这样做会改变顺序。
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])
Run Code Online (Sandbox Code Playgroud)
我得到以下结果:
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]]
Run Code Online (Sandbox Code Playgroud)
我们也可以使用if条件来完成此操作,但是我想知道是否使用numpy或pandas存在捷径?
您需要在同一排序键中考虑这两个值。通常,Python将按[0]值排序,然后按[1]值排序。我们可以通过创建一个反转值的键来利用它:
sorted(twod_list,key=lambda l:(l[1], l[0]))
Run Code Online (Sandbox Code Playgroud)
现在,Python会首先排序依据的[0]关键,这是[1]原来的,然后根据[1]关键,这是[0]原来的。
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |