【问题标题】:Sort lists in a nested list based on the argsort of the 0th list根据第 0 个列表的 argsort 对嵌套列表中的列表进行排序
【发布时间】:2018-02-25 20:21:57
【问题描述】:

根据列表中的第一个列表对列表嵌套进行排序的最佳方法是什么?

排序前

>>> list_of_things = [[100,300,200],[t,u,v]]

排序后

>>> [[100,200,300],[t,v,u]]

到目前为止,我使用搜索找到了一个可以用来排序的索引

>>> import numpy as np
>>> sort_index=np.argsort(list_of_things[0]) 

但我还没有找到一种 Python 方法来索引 sort_index 上的两个子列表。

有什么想法吗? 谢谢!

【问题讨论】:

  • 您想根据 list[0] 的 argsorted 值对 list[1:n] 进行排序吗?

标签: python arrays list sorting numpy


【解决方案1】:
print(arr) 
array([['100', '300', '200'],
       ['t', 'u', 'v']],
      dtype='<U21')

首先,argsort 第 0 个列表:

idx = np.argsort(arr[0])

print(idx)
array([0, 2, 1])

现在,只需使用numpy indexing

arr = arr[:, idx]

print(arr)
array([['100', '200', '300'],
       ['t', 'v', 'u']],
      dtype='<U21')

【讨论】:

    【解决方案2】:

    尝试使用more_itertools 中的工具,这是一个对可迭代对象进行并行排序的第三方库。

    首先安装库:

    > pip install more_itertools
    

    代码

    from more_itertools import sort_together
    
    
    iterables = [[100, 300, 200], ["t", "u", "v"]]
    sort_together(iterables)
    # [(100, 200, 300), ('t', 'v', 'u')]
    

    默认情况下,所有可迭代对象都按第 0 个索引排序。此排序优先级可以通过key_list 参数进行调整。

    详情请见more_itertools docs

    【讨论】:

      猜你喜欢
      • 2017-07-09
      • 2017-02-08
      • 2021-09-30
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 2012-03-29
      • 2021-05-02
      • 2017-01-02
      相关资源
      最近更新 更多