我喜欢让 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]]
郎朗坤
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]]
一切都运转良好。
添加回答
举报
0/150
提交
取消