python中具有键函数的交替方向元组排序

Alternating-direction tuple sort with key function in python

提问人:Mckay Holmes 提问时间:8/8/2023 更新时间:8/8/2023 访问量:30

问:

我需要对元组列表(长度 2)进行排序,但特别需要它按第二个值降序排序,然后按第一个值升序排序。 即(0,1)<(1,1)<(1,0)

我想我可以使用比较函数轻松完成,但想知道它是否适用于关键函数。

Python 排序 元组 比较

评论

0赞 quamrana 8/8/2023
这个问题的答案有帮助吗?
0赞 John Gordon 8/8/2023
“比较函数”和“关键函数”有什么区别?我什至不确定你在问什么。
0赞 Mckay Holmes 8/9/2023
@JohnGordon 键函数接受单个参数并返回一个用于排序的数字。比较函数采用两个参数,如果第一个参数分别小于、等于或大于第二个参数,则返回 -1、0 或 1。从 python3 开始,您不能再在 sort() 中使用 'cmp=____' 作为可选参数。现在仅直接支持密钥。
0赞 Mckay Holmes 8/9/2023
@quamrana 不完全是。使用类似 sort(L,key=itemgetter(1,0),reverse=True) 的东西会降序对两个值进行排序
0赞 Stef 8/9/2023
@JohnGordon 对比度比较功能关键功能

答:

1赞 Codist 8/8/2023 #1

您可以按如下方式使用 lambda 密钥:

tlist = [
    (1,1),
    (0,1),
    (1,0)
]

print(sorted(tlist, key=lambda x: (-x[1], x[0])))

输出:

[(0, 1), (1, 1), (1, 0)]

或者,没有 lambda...

def cf(t):
    a, b = t
    return -b, a

print(sorted(tlist, key=cf))

评论

0赞 Mckay Holmes 8/9/2023
嗯,这是一个面子的时刻......谢谢:)