在Python中对由一个列表索引的列表列表进行排序的更简单方法

我想对两个列表进行排序,两个列表中的元素是成对的.

我想按这些对中的第二个元素对列表进行排序.

例如,如果我有

a_list = [[51132, 55274, 58132], [190, 140, 180]]

想要

sorted_list = [[55274, 58132, 51132], [140, 180, 190]]

有没有比Python2.7中的以下方法更简单的方法?

from operator import itemgetter
sorted_list = map(list, zip(*sorted(map(list,zip(*a_list)), key=itemgetter(1))))

最好的祝福,
奥斯坦

解决方法:

我有点不愿意将其发布为答案,但是为什么不呢?

不,没有简单的方法可以在Python中实现排序-除了可以删除该内部映射之外:

>>> map(list, zip(*sorted(zip(*a_list), key=itemgetter(1))))
[[55274, 58132, 51132], [140, 180, 190]]

乍一看似乎有些令人费解(尽管与其他地图相比并没有那么多),但实际上它很清楚:将列表压缩,按第二个元素排序,然后再压缩回去.每个了解Python的人都应该了解代码的功能.

如果要使其更加清晰,可以添加一行注释来描述排序的作用,或者将其包装在具有描述性名称和相同或更广泛注释的函数中.

上一篇:mysql-按两列进行SQL排序,忽略null


下一篇:c#-按两个具有不同类型的字段对不同型号的列表进行排序