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

sorted函数内部是怎么实现的

def cmp_ignore_case(s1, s2):

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

        print s1

        print s2+'\nNo Change\n'

        return -1

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

        print s1

        print s2+'\nChange\n'

        return 1

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

        print s1

        print s2+'\nEqual\n'

        return 0

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

运行结果是这样:

about
bob
No Change

Zoo
about
Change

Zoo
bob
Change

Credit
bob
Change

Credit
Zoo
No Change

['about', 'bob', 'Credit', 'Zoo']

我就想问为什么s1变成about了。

还有为什么只用了5步就排好了,不是冒泡法或选择法。难道是快排,或者动态语言独有的排序?请大神指点

正在回答

3 回答

我觉得sorted函数应该是冒泡排序

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

这个程序的运行方式不应该是

  1. 先将 s1 ,s2= bob,about 读取至cmp_ignore_case中

  2. 不管s1, s2排序如何,先输出

  3. 然后如果return的是1,才会调换位置

如果早在判断s1.lower()<s2.lower()之前s1, s2就已经调换了位置,那么还要这个return做什么

“return后就变为 s1 ,   s2=about, bob”这句话不理解,print在return前面啊!请大神明示

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

因为你后面的return -1 。 s1 ,s2= bob,about 

                return后就变为 s1 ,   s2=about, bob


cmp 就是sorted后面的默认参数可以在内部(甚至可以弄个匿名函数)来修改排序,是python的语言  就是简洁

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

举报

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

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

进入课程

sorted函数内部是怎么实现的

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