基于第0个列表的argsort对嵌套列表中的列表进行排序

时间:2017-09-17 01:44:40

标签: python arrays list sorting numpy

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

排序前的

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

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

有什么想法? 谢谢!

2 个答案:

答案 0 :(得分:4)

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

首先,argsort 0 th 列表:

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

答案 1 :(得分: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