【问题标题】:Method to sort a list of lists? [duplicate]对列表列表进行排序的方法? [复制]
【发布时间】:2011-03-05 02:19:32
【问题描述】:

我有一个列表列表(不能是元组,因为我必须动态生成它),它的结构是一个 int 和一个 float 的列表列表,如下所示:

[[1,1.0345],[2,5.098],[3,4.89],[2,5.97]]

我想对其进行排序,但我只设法让内置排序功能按列表的第一个元素对其进行排序或不做任何事情,但我需要按列表的第二个元素对它们进行排序并且我不想实现自己的排序功能。所以我想要的一个例子是:

[[1,1.0345],[3,4.89],[2,5.098],[2,5.97]]

有人能告诉我如何使用内置排序功能之一来执行此操作吗?

【问题讨论】:

    标签: python list sorting


    【解决方案1】:

    传递key 参数。

    L.sort(key=operator.itemgetter(1))
    

    【讨论】:

    • 我认为我没有使用过sort,因为我们得到了sorted。但是operator.itemgetter 比编写自己的 lambda 更好。
    • @oylenshpeegul:我真的很好奇。为什么 operator.itemgetter 更胜一筹?我的直觉是写 lambda。它更短、更通用,并且不需要导入我很少使用的模块。我承认 itemgetter 似乎快了 30% 左右,但这不太可能成为实际代码中的瓶颈。
    • 好吧,我实际上必须对我从一个包含 180 万个条目的文件中解析出来的数字列表进行排序,因此在我的情况下,我很欣赏 30% 的加速。
    • x = [[[5,3],1.0345],[[5,6],5.098],[[5,4],4.89],[[5,1],5.97] ] 有了这样的列表,我们可以使用itemgetter() 对 x[0][1] 中的元素进行排序吗?
    • 这里的“操作员”是什么??
    【解决方案2】:
    >>> l = [[1,1.0345],[2,5.098],[3,4.89],[2,5.97]]
    >>> l.sort(key=lambda x: x[1])
    >>> l
    [[1, 1.0345], [3, 4.8899999999999997], [2, 5.0979999999999999], [2, 5.9699999999999998]]
    

    【讨论】:

    • x = [[[5,3],1.0345],[[5,6],5.098],[[5,4],4.89],[[5,1],5.97] ] 有了这样的列表,我们如何对 x[0][1] 中的元素进行排序?
    【解决方案3】:

    如何使用它们排序的关键参数...

    sorted_list = sorted([[1,1.0345],[3,4.89],[2,5.098],[2,5.97]], key=lambda x: x[1])
    

    这告诉 python 使用每个列表的索引 1 处的项目作为比较的键来对列表列表进行排序。

    【讨论】:

    • 那是因为 sorted 返回一个新列表。内置 .sort 对现有列表进行排序。
    • @user:感谢 Senthil,我没有意识到这可能不会被理解。
    • 是的,抱歉,我对 python 还是有点陌生​​,而且我已经习惯了 C++,这些函数通常会修改对象而不是返回不同的对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2014-03-17
    相关资源
    最近更新 更多