Mar*_*llo 1 python arrays sorting algorithm multidimensional-array
如何在不使用numpy或其他模块的情况下,基于第一行数据将多维列表排序为字母顺序
例如,我有一个列表:
[['M', 'A', 'R', 'K']
[1, 3, 5, 4]
[2, 6, 7, 8]]
Run Code Online (Sandbox Code Playgroud)
我希望它像:
[['A', 'K', 'M', 'R']
[3, 4, 1, 5]
[6, 8, 2, 7]]
Run Code Online (Sandbox Code Playgroud)
谢谢!
我认为应该有更好的方法; 无论如何,这将成功:
>>> l = [['M', 'A', 'R', 'K'], [1, 3, 5, 4], [2, 6, 7, 8]]
>>> sorted_l = map(list, zip(*sorted(zip(*l))))
>>> print(list(sorted_l))
[['A', 'K', 'M', 'R'], [3, 4, 1, 5], [6, 8, 2, 7]]
Run Code Online (Sandbox Code Playgroud)
编辑:
zip(*l)给你一个迭代器(在Python 3中),如果你这样做[i for i in zip(*l)],你会发现它看起来像[('M', 1, 2), ('A', 3, 6), ('R', 5, 7), ('K', 4, 8)]
sorted(zip(*l))对上面的列表进行排序([('A', 3, 6), ('K', 4, 8), ('M', 1, 2), ('R', 5, 7)]在引擎盖下),我没有指定密钥,因此它直接比较元素
然后,你再次拉链,然后你得到一个你想要的迭代器(如果你把它们打印出去l就是元素('A', 'K', 'M', 'R'), (3, 4, 1, 5), (6, 8, 2, 7)); 但是,你必须做的map(),所以你可以得到<class 'list'>的,而不是<class 'tuple'>
最后,map()还返回Python3中的迭代器,以获取列表,您只需用于list([iterable])构造最终列表.