栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

cmp

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

cmp

cmp_to_key的使用

因python3的sorted函数不再支持比较函数cmp,只能通过functools中的cmp_to_key传给key,实现python2中sorted函数的cmp参数的功能

首先,我们知道list.sort() 和 sorted() 都有一个 key 形参用来指定在进行比较前要在每个列表元素上调用的函数。

例如

# 不区分大小写排序
print(sorted("This is a test string from Andrew".split(), key=str.lower))

输出:['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

l = [(9, 4), (2, 10), (4, 3), (3, 6),(9, 2)]
print(sorted(l,key=lambda x:x[0]))
print(sorted(l,key=lambda x:x[1]))

输出:

[(2, 10), (3, 6), (4, 3), (9, 4), (9, 2)]
[(9, 2), (4, 3), (9, 4), (3, 6), (2, 10)]

但这只能进行单个元素的比较。

比如我们要将上述列表,按元素中第一个数逆序排列,若第一个数相等,按第二个数的顺序排列。这就用到了cmp_to_key!

它在list中的工作机制就是将列表中的元素去两两比较,当cmp返回是正数时 交换两元素

a = [(9, 4), (2, 10), (4, 3), (3, 6),(9, 2)]
def cmp(x,y):
    if x[0] < y[0]:
        return 1
    elif x[0] > y[0]:
         return -1
    else:
        if x[1] > y[1]:
            return 1
        else:
            return -1
print(sorted(a,key=cmp_to_key(cmp)))

输出:

[(9, 2), (9, 4), (4, 3), (3, 6), (2, 10)]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/846337.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号