根据列表中的第一个列表对列表嵌套进行排序的最佳方法是什么?
排序前的
>>> 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上的两个子列表。
有什么想法? 谢谢!
答案 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。