【问题标题】:Sorting nested lists by specific logic - Python [duplicate]按特定逻辑对嵌套列表进行排序 - Python [重复]
【发布时间】:2015-05-29 07:23:29
【问题描述】:

嵌套列表,

A = [[2, 0], [1, 0], [4, 3], [3, 2], [5, 1]] 

我正在尝试根据1st 元素按升序对其进行排序,即

result_A = [[2, 0], [1, 0], [5, 1], [3, 2], [4, 3]]

当1st 元素在任何嵌套列表中都很常见时,我会尝试根据0th 元素对其进行排序。所以,

required_A = [[1, 0], [2, 0], [5, 1], [3, 2], [4, 3]]

这是我目前的代码:

required_A = sorted(A, key=itemgetter(1))

我能够根据1st 元素对其进行排序,但我不知道如何在0th 元素上再次对其进行排序,而不会弄乱剩余的顺序。谢谢!

【问题讨论】:

  • 或只是sorted(A, key=lambda x: x[::-1])

标签: python sorting python-3.x nested-lists


【解决方案1】:

这显示了如何修复您的 itemgetter 代码。

>>> from operator import itemgetter
>>> sorted(A, key=itemgetter(1, 0))
[[1, 0], [2, 0], [5, 1], [3, 2], [4, 3]]

当您将多个参数传递给itemgetter 时,它会返回一个函数,该函数可用于从给定序列构造一个元组,其中包含作为参数提供给itemgetter 的各个索引中的值。

元组和所有序列一样,可以在 Python 中比较lexicographically。这意味着它们将从左到右逐个索引进行比较,直到一个序列超过另一个序列。这也意味着元组为您的排序提供了极好的键。

【讨论】:

    【解决方案2】:

    如果我们在单个子列表中的项目以相反的顺序排列,我们可以直接对整个列表进行排序。因此,让我们通知sorted 函数我们要考虑反向子列表:

    sorted(A, key=lambda x: list(reversed(x))
    

    【讨论】:

    • 你应该真正解释你的答案是如何工作的:-)
    • 添加了一点解释。
    猜你喜欢
    • 2019-02-24
    • 2019-01-17
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 2022-01-14
    • 2019-09-09
    • 2010-09-21
    相关资源
    最近更新 更多