如何根据python中的第一个行字母将多维列表排序为字母顺序

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)

谢谢!

daz*_*sed 5

我认为应该有更好的方法; 无论如何,这将成功:

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

编辑:

  1. zip(*l)给你一个迭代器(在Python 3中),如果你这样做[i for i in zip(*l)],你会发现它看起来像[('M', 1, 2), ('A', 3, 6), ('R', 5, 7), ('K', 4, 8)]

  2. sorted(zip(*l))对上面的列表进行排序([('A', 3, 6), ('K', 4, 8), ('M', 1, 2), ('R', 5, 7)]在引擎盖下),我没有指定密钥,因此它直接比较元素

  3. 然后,你再次拉链,然后你得到一个你想要的迭代器(如果你把它们打印出去l就是元素('A', 'K', 'M', 'R'), (3, 4, 1, 5), (6, 8, 2, 7)); 但是,你必须做的map(),所以你可以得到<class 'list'>的,而不是<class 'tuple'>

  4. 最后,map()还返回Python3中的迭代器,以获取列表,您只需用于list([iterable])构造最终列表.

文档:zip,排序地图