上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

Python 列表 sort()函数使用详解

guduadmin32小时前

「作者主页」:士别三日wyx

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者

「推荐专栏」:小白零基础《Python入门到精通》

sort函数使用详解

  • 1、升序降序
  • 2、sort()和sorted()的区别
  • 3、切片排序
  • 4、指定排序规则
    • 4.1、按字符串长度排序
    • 4.2、按第二个字符排序
    • 4.3、查找第n大的元素
    • 5、其他类型排序

      sort() 可以对列表进行「排序」

      语法

      list.sort( key, reverse )
      

      参数

      • key :(可选)指定排序规则
      • reverse :(可选)升序降序

        返回值

        • 返回None,同时将原列表排序。也就是没有返回值

          案例:将列表中的元素排序

          list1 = [1, 3, 2, 5]
          list1.sort()
          print(list1)
          

          输出:

          [1, 2, 3, 5]
          

          1、升序降序

          reverse 参数控制排序的「升序」「降序」,True表示降序、False表示升序;默认升序reverse=False

          list1 = [1, 3, 2, 5]
          list1.sort(reverse=True)
          print(list1)
          list1.sort(reverse=False)
          print(list1)
          list1.sort()
          print(list1)
          

          输出:

          [5, 3, 2, 1]
          [1, 2, 3, 5]
          [1, 2, 3, 5]
          

          2、sort()和sorted()的区别

          接收 sort() 的返回值,可以发现是None

          list1 = [1, 3, 2, 5]
          list2 = list1.sort()
          print(list2)
          

          输出:

          None
          

          打印一下排序前、后的「内存地址」,可以发现地址没有改变

          list1 = [1, 3, 2, 5]
          print(id(list1))
          list1.sort()
          print(id(list1))
          

          输出:

          2361470487744
          2361470487744
          

          sort() 的设计思想就是「修改」原列表,而不是返回新的列表;

          它不会创建新的列表,从而节省「效率」

          当然,这也意味着原列表被修改了,使用时要留意这一点;

          sorted() sort() 的扩展函数,可以对列表的元素排序,同时不会修改原列表。

          list1 = [1, 3, 2, 5]
          list2 = sorted(list1)
          print(list1)
          print(list2)
          

          输出:

          [1, 3, 2, 5]
          [1, 2, 3, 5]
          

          从结果可以看到, sorted() 创建了新的列表,用来保存排序后的列表。

          3、切片排序

          将原列表「切片」复制给新列表,再对新列表排序,同样可以实现排序且不改变原列表。

          list1 = [1, 3, 2, 5]
          list2 = list1[:]
          list2.sort()
          print(list1)
          print(list2)
          

          输出:

          [1, 3, 2, 5]
          [1, 2, 3, 5]
          

          直接「赋值」的方式是不行的,因为赋值的话,两个列表会指向同一个内存地址,原列表会同步变化。

          list1 = [1, 3, 2, 5]
          list2 = list1
          list2.sort()
          print(list1)
          print(list2)
          

          输出:

          [1, 2, 3, 5]
          [1, 2, 3, 5]
          

          4、指定排序规则

          key 参数可以指定排序「规则」

          4.1、按字符串长度排序

          对于元素全是字符串的「列表」,可以按照字符串的「长度」来排序

          list1 = ['aaaaa', 'aa', 'aaaa', 'a']
          list1.sort(key=len)
          print(list1)
          

          输出:

          ['a', 'aa', 'aaaa', 'aaaaa']
          

          本质上是利用字符串的 len() 函数计算长度,再排序,如果遇到 int 这列没有 len() 函数的元素,就会报错 TypeError: object of type ‘int’ has no len()。

          Python 列表 sort()函数使用详解,在这里插入图片描述,第1张

          4.2、按第二个字符排序

          对于元素全是字符串的列表,可以按照元素的第几个「字符」排序。

          list1 = ['cb', 'fa', 'zd', 'ec']
          list1.sort(key=lambda x: x[1])
          print(list1)
          

          输出:

          ['fa', 'cb', 'ec', 'zd']
          

          需要注意的是,所有元素的字符长度都要够数,比如元素只有1个字符,却按照第2个字符排序,函数找不到第2个字符,肯定会报错 IndexError: string index out of range

          Python 列表 sort()函数使用详解,在这里插入图片描述,第2张

          4.3、查找第n大的元素

          先降序,再按照「索引」取值,就能获取列表中第一大的值或第二大的值等。

          list1 = [4, 3, 9, 6, 1]
          list1.sort(reverse=True)
          print('最大的元素:', list1[0])
          print('第二大的元素:', list1[1])
          

          输出:

          最大的元素: 9
          第二大的元素: 6
          

          5、其他类型排序

          sort() 只能对列表排序,而 sorted() 能对可迭代对象排序;所以,字符串、元组、字典等类型想排序,可以用 sorted()

          str1 = "312"
          print(sorted(str1))
          tuple1 = (5, 1, 3)
          print(sorted(tuple1))
          dict1 = {"key1": 1, "key2": 2}
          print(sorted(dict1))
          

          输出:

          ['1', '2', '3']
          [1, 3, 5]
          ['key1', 'key2']
          

          从输出结果可以发现,字符串、元组、字典类型排序后,返回的是列表类型;并且字典只对键排序,不对值排序。

网友评论

搜索
最新文章
热门文章
热门标签