我想对两个列表进行排序,两个列表中的元素是成对的.
我想按这些对中的第二个元素对列表进行排序.
例如,如果我有
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的人都应该了解代码的功能.
如果要使其更加清晰,可以添加一行注释来描述排序的作用,或者将其包装在具有描述性名称和相同或更广泛注释的函数中.