Python - 在列表列表中对元素进行排序

Sha*_*gar 5 python sorting list

如果在别处得到回答,请道歉; 我试过搜索,但没有找到任何能回答我问题的东西(或许我有,但不明白)......

我是Python的新手(v2.6.2)并且有一个包含浮点值的列表列表,看起来类似于以下内容(除了完整的东西每个列表有超过200万个条目):

cat = [[152.123, 150.456, 151.789, ...], [4.123, 3.456, 1.789, ...], [20.123, 22.456, 21.789, ...]]
Run Code Online (Sandbox Code Playgroud)

现在我要做的是按照第三个列表的元素的升序对所有3个列表进行排序,这样我得到:

cat_sorted = [[152.123, 151.789, 150.456, ...], [4.123, 1.789, 3.456, ...], [20.123, 21.789, 22.456, ...]]
Run Code Online (Sandbox Code Playgroud)

我尝试了一些东西,但他们没有给我我正在寻找的东西(或者我可能错误地使用它们).有没有办法做我想要的东西,如果有的话,最简单和最快的是什么(考虑到我有3×2百万条款)?有没有办法用另一个列表排序一个列表?

Mar*_*ers 8

这将是痛苦的,但使用默认的python你有2个选择:

  • 装饰第一个和第二个列表enumerate(),然后使用索引对这些列表进行排序以引用第三个列表中的值:

    cat_sorted = [
        [e for i, e in sorted(enumerate(cat[0]), key=lambda p: cat[2][p[0]])],
        [e for i, e in sorted(enumerate(cat[1]), key=lambda p: cat[2][p[0]])],
        sorted(cat[2])
    ]
    
    Run Code Online (Sandbox Code Playgroud)

    虽然它可能有助于cat[2]就地排序而不是使用sorted(); 你不能四处使用sorted()其他两个.

  • zip()将三个列表放在一起,然后对这个新列表列表的第三个元素进行排序,然后zip()再次回到原始结构:

    from operator import itemgetter
    cat_sorted = zip(*sorted(zip(*cat), key=itemgetter(2)))
    
    Run Code Online (Sandbox Code Playgroud)

两者都不是性能破坏者,也不是数百万个数字的普通python列表.