【问题标题】:Python Sort Multidimensional List first element Based on second element that already sorted [duplicate]Python排序多维列表第一个元素基于已经排序的第二个元素[重复]
【发布时间】:2023-03-18 22:50:01
【问题描述】:

我有一个这样的多维列表(第二个元素已经排序)

    [[92, 25], [93, 25], [95, 27], [94, 27], [94, 27], [92, 27], [89, 27], [89, 27], [92, 27], [91, 30], [90, 30], [90, 30], [90, 30], [91, 30]]

所以我想根据第二个元素(降序)对第一个元素进行排序。预期输出:

    [[93, 25], [92, 25], [95, 27], [94, 27], [94, 27], [92, 27], [92, 27], [89, 27], [89, 27], [91, 30], [91, 30], [90, 30], [90, 30], [90, 30]]

【问题讨论】:

  • 对,那么您发现按子列表中的多个项目排序时出了什么问题?
  • 你能解释一下为什么这是预期的输出吗?您尝试过什么来解决这个问题?
  • 另请注意,您称其为“数组”,但它不在 Python 中,它是一个列表。 99% 的情况下,“数组”指的是 NumPy 数组。还有一个 Python 数组,但几乎没有使用过。
  • 哦,我想我刚刚通过在 stackoverflow 上搜索你的关键字伙伴 @roganjosh 解决了我自己的问题,我找到了 itemgetter,它解决了我自己的问题,就像 3 行重复行

标签: python arrays list sorting multidimensional-array


【解决方案1】:

让我直截了当地说,您希望列表首先基于 ascending 元组中的 second 元素排序,并通过 第一个元素降序

假设您的元素是数字,您可以使用sorted(l, key=lambda x: (x[1], -x[0])) 做到这一点。如果不是,你必须编写一个更复杂的比较函数。

【讨论】:

  • 酷,所以你的答案和我建议的骗子一样,你可以用锤子敲打
  • @roganjosh “欺骗”不涉及数据不同列的不同排序(升序/降序)。
  • 嗯,是的。不过没关系。
  • @roganjosh 它在哪里说的?
  • this 下的 cmets 中导致另一个欺骗目标
【解决方案2】:

如果你想做就地排序而不是

arr.sort(key=lambda x:(x[1], -x[0])

否则可以使用排序

sortedArray = sorted(arr, key=lambda x: (x[1], -x[0]))

【讨论】:

  • 哎呀看到@roganjosh 的重复项,绝对是重复项
猜你喜欢
  • 2022-08-18
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 2013-12-04
  • 2016-03-17
  • 2014-03-02
相关资源
最近更新 更多