猿问

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

我喜欢让 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]]

这并不像预期的那样。有什么办法可以找到我需要的东西吗?

预先感谢您的帮助。


牛魔王的故事
浏览 94回答 2
2回答

慕娘9325324

IIUC,用于key限制与前两个元素的比较:sorted(intervals, key=lambda x: x[:2])输出:[[1, 2], [1, 3], [1, 6], [7, 10], [8, 10], [15, 18]]它适用于子列表中任意数量的元素:import randomintv_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]]

郎朗坤

我已经自己解决了这个问题。实际上,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]]一切都运转良好。
随时随地看视频慕课网APP

相关分类

Python
我要回答