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

标签 python list sorting

如果这个问题已经在其他地方得到回答,我们深表歉意;我试过搜索,但没有找到任何能回答我问题的东西(或者我有,但不明白)...

我是 Python (v2.6.2) 的新手,有一个包含浮点值的列表列表,看起来像下面这样(除了完整的东西每个列表有 2+ 百万个条目):

cat = [[152.123, 150.456, 151.789, ...], [4.123, 3.456, 1.789, ...], [20.123, 22.456, 21.789, ...]]

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

cat_sorted = [[152.123, 151.789, 150.456, ...], [4.123, 1.789, 3.456, ...], [20.123, 21.789, 22.456, ...]]

我已经尝试了一些东西,但它们并没有给我我正在寻找的东西(或者我可能没有正确使用它们)。有没有办法做我正在寻找的东西,如果是这样,什么是最简单和最快的(考虑到我有 3 x 200 万个条目)?有没有一种方法可以使用另一个列表对一个列表进行排序?

最佳答案

这会很痛苦,但是使用默认的 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])
    ]
    

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

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

    from operator import itemgetter
    cat_sorted = zip(*sorted(zip(*cat), key=itemgetter(2)))
    

两者都不会成为性能破坏者,如果使用包含数百万个数字的普通 Python 列表。

关于Python - 对列表列表中的元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14161827/

相关文章:

python - Selenium:打开新链接并切换选项卡以获取内容

python - 我需要一个类来创建位于磁盘上的字典文件

ios - 获取 SwiftUI 中 List 的内容偏移量

python - 用于比较的自定义 __lt__ 方法

sorting - 最快的插入/排序数据结构

c++ - 面试谜题: Sorting a million number input with limited memory

python - Pandas ,重命名多索引列(数据顺序已更改)

python - 使用 for 循环创建元组。

ruby-on-rails - Rails where, sort and combining 同一张表

python - pandas 根据条件连接数据框