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']) 验证也是对的,但是答案没有取单词的第一个字母进行比较也是对的,为什么呢
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']) 验证也是对的,但是答案没有取单词的第一个字母进行比较也是对的,为什么呢
2017-09-08
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。
举报