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

python中自定义排序函数

def cmp_ignore_case(s1, s2):
   u1 = s1.upper()
   u2 = s2.upper()
   if u1 < u2:
       return -1
   if u1 > u2:
       return 1
   return 0
print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)

问一下  这个比较大小是怎么比较的哎?当return -1 return 1 return -0 我知道是什么意思 但是当让这些字符串从大到小进行排序 是怎么进行的? u1   u2是怎么选取的哎?


正在回答

2 回答

sorted内置函数默认为正序(也就是从小到大),要实现从大到小排序只需要在使用sorted函数时,加上reverse=True参数即可,偏函数就是简化函数调用者的参数输入。

import functools

def cmp_ignore_case(s1, s2):
    s1, s2 = (s1.lower(), s2.lower())
    if s1 > s2:
        return 1
    if s1 < s2:
        return -1
    return 0

sorted_ignore_case = functools.partial(sorted, cmp=cmp_ignore_case, reverse=True)
print sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit'])


输出结果:

['Zoo', 'Credit', 'bob', 'about']
0 回复 有任何疑惑可以回复我~
def cmp_ignore_case(s1, s2):
    if s1[0].lower() < s2[0].lower():
        return -1
    if s1[0].lower() > s2[0].lower():
        return 1
    else:
        return 0

print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)

对于比较函数cmp_ignore_case(s1, s2),要忽略大小写比较,就是先把两个字符串都变成大写(或者都变成小写),再比较。

至于由大到小进行排序,可以采用下面的代码,只需对于返回的参数加以修改:

def cmp_ignore_case(s1, s2):
    u1 = s1.upper()
    u2 = s2.upper()
    if u1 < u2:
        return 1
    if u1 > u2:
        return -1
    return 0
print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case)


0 回复 有任何疑惑可以回复我~
#1

慕沐4974640 提问者

if u1 < u2: return 1 if u1 > u2: return -1 比如就拿这个来说 u1 = s1.upper() u2 = s2.upper() 但是对于['bob', 'about', 'Zoo', 'Credit']中的元素是怎么选取的? 意识就是想表达 u1先取'bob' U2 取'about' 来计较大小? 感觉这个不好理解
2017-04-16 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255533    人
  • 解答问题       3038    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

python中自定义排序函数

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号