为了账号安全,请及时绑定邮箱和手机立即绑定

如何按 2 列对多维数组进行一一排序 - 全部按相同顺序

如何按 2 列对多维数组进行一一排序 - 全部按相同顺序

牛魔王的故事 2023-09-05 21:07:50
我喜欢让 Python根据第一个值而不是第二个值进行排序。因此,排序函数将首先尝试对第一列上的项目进行排序,如果第一列的值相同,那么它将尝试根据第二列的值进行排序。2D array所以,如果我有一个array像这样的Python-[[1,6],[8,10],[15,18],[7,10],[1,3],[1,2]]那么对于给定的数组,输出应该是这样的 -[[1, 2], [1, 3], [1, 6], [7, 10], [8, 10], [15, 18]]我必须python lambda为此使用函数。我所做的是——intervals = [[1,6],[8,10],[15,18],[7,10],[1,3],[1,2]] ................ ................ intervals.sort(key=lambda x:x[1] and x[0])之后,我得到的是这样的 -[[1, 6], [1, 3], [1, 2], [7, 10], [8, 10], [15, 18]]如果我这样做——intervals.sort(key=lambda x:x[0] and x[1])然后我得到这个-[[1, 2], [1, 3], [1, 6], [7, 10], [8, 10], [15, 18]]这并不像预期的那样。有什么办法可以找到我需要的东西吗?预先感谢您的帮助。
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

IIUC,用于key限制与前两个元素的比较:


sorted(intervals, key=lambda x: x[:2])

输出:


[[1, 2], [1, 3], [1, 6], [7, 10], [8, 10], [15, 18]]

它适用于子列表中任意数量的元素:


import random


intv_random = [[*i, random.randint(1, 10000)] for i in intervals]


sorted(intv_random, key=lambda x: x[:2])

输出:


[[1, 2, 3378],

 [1, 3, 5035],

 [1, 6, 5732],

 [7, 10, 4474],

 [8, 10, 5862],

 [15, 18, 1176]]


查看完整回答
反对 回复 2023-09-05
?
郎朗坤

TA贡献1921条经验 获得超9个赞

我已经自己解决了这个问题。实际上,lambda 函数的作用是根据键值进行比较。因此,为了实现我的目标,我需要用一个数字来表示我的 2D 值,其中该值不应超过 int 限制,并且应根据优先级表示,在本例中为第 0 列,然后是第 1 列。所以我所做的就像这-

intervals.sort(key=lambda x: x[0]/2 + x[1]/10)

并得到-

[[1, 2], [1, 3], [1, 6], [7, 10], [8, 10], [15, 18]]

一切都运转良好。


查看完整回答
反对 回复 2023-09-05
  • 2 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信