文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-13 10:27

关注

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:小白零基础《Python入门到精通》

sort函数使用详解

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

语法

list.sort( key, reverse )

参数

返回值

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

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

输出:

[1, 2, 3, 5]

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]

接收 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))

输出:

23614704877442361470487744

sort() 的设计思想就是「修改」原列表,而不是返回新的列表;
它不会创建新的列表,从而节省「效率」
当然,这也意味着原列表被修改了,使用时要留意这一点;
sorted() sort() 的扩展函数,可以对列表的元素排序,同时不会修改原列表。

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

输出:

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

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


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

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 = list1list2.sort()print(list1)print(list2)

输出:

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

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()。

在这里插入图片描述


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

在这里插入图片描述


4.3、查找第n大的元素

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

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

输出:

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

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']

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

来源地址:https://blog.csdn.net/wangyuxiang946/article/details/131625625

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯