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

cmp括号里面为什么不是分别取出第一个字母进行比较

import functools

sorted_ignore_case = functools.partial(sorted,cmp = lambda x,y:cmp(x[0].upper(),y[0].upper()))

print sorted_ignore_case(['bob', 'about', 'Zoo', 'Credit'])

验证也是对的,但是答案没有取单词的第一个字母进行比较也是对的,为什么呢


正在回答

3 回答

def cmp_ignore_case(s1, s2):

    if s1.lower() < s2.lower():

        return -1

    if s1.lower() > s2.lower():

        return 1

    return 0

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

这个函数是在2-7里的,想必你是知道的。其实你将最后一句print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case),改成这样print sorted(['bob', 'about', 'Zoo', 'Credit'], cmp=cmp_ignore_case)。输出的结果和答案一模一样,这说明了什么,更改cmp的对比方法不会影响让最后sorted输出的集合里参数有所改变(尽管全变大upper,或全变小lower,这个只会改变cmp的对比方式,也就是那个-1,1,0,以至于改变最后sorted输出集合的排序,也是为了符合题目‘实现忽略大小写排序’)。当然,前提是你要知道sorted(iterable, cmp=None, key=None, reverse=False)这个高阶函数里边有四个参数,其中之一就是cmp。

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

这里给出的词首字母都是不同的,首字母的顺序就是词的顺序,如果有单词首字母一样,就要按后面的字母来排。

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

字符串的比较一般都是按照第一个字符的比较结果来确定的。参考答案和你的方式都能够统一所比较的字符串首字符的大小写,所以都能够得到一样的结果。

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

举报

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

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

进入课程

cmp括号里面为什么不是分别取出第一个字母进行比较

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信