Python 列表 sort()函数使用详解
创始人
2025-01-16 15:33:29
0

「作者主页」:士别三日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()。

在这里插入图片描述


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 

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

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

相关内容

热门资讯

透视脚本!wepoker有脚本... 您好:AApoker透视挂这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户...
终于清楚!科乐天天踢起手拿好牌... 终于清楚!科乐天天踢起手拿好牌,多乐找刺激脚本,透牌教程(有挂助手);是一款可以让一直输的玩家,快速...
玩家必看攻略!wpk透视是真的... 玩家必看攻略!wpk透视是真的假的,曝光开挂辅助透视神器-都是存在有挂是一款可以让一直输的玩家,快速...
大神推荐“上饶中至辅助软件如何... 大神推荐“上饶中至辅助软件如何设置”科普开挂作弊辅助app(一直是真的有挂);是一款可以让一直输的玩...
透视中牌率!wepoker怎挂... 透视中牌率!wepoker怎挂飞机,(AApoker工具)好像存在有挂,安装教程(有挂存在);1、完...
查到实测辅助!牌乐门黑科技,天... 查到实测辅助!牌乐门黑科技,天天填大坑辅助器免费下载,可靠教程(有挂细节);天天填大坑辅助器免费下载...
透视软件!pokemmo辅助器... 您好:pokemmo辅助器这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户...
一分钟揭秘“如何下载安装胡乐辅... 您好:如何下载安装胡乐辅助脚本这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多...
透视教程!hhpkoer辅助器... 透视教程!hhpkoer辅助器,(wepokeR)竟然有挂,玩家教程(讲解有挂);1.wepokeR...
重大来袭!微信小程序蜀山辅助器... 重大来袭!微信小程序蜀山辅助器,破解大菠萝的辅助器,普及教程(真实有挂);亲真的是有正版授权,小编(...