|
「作者主页」:士别三日wyx「作者简介」:CSDNtop100、阿里云博客专家、华为云享专家、网络安全领域优质创作者「推荐专栏」:小白零基础《Python入门到精通》sort函数使用详解1、升序降序2、sort()和sorted()的区别3、切片排序4、指定排序规则4.1、按字符串长度排序4.2、按第二个字符排序4.3、查找第n大的元素5、其他类型排序sort()可以对列表进行「排序」语法list.sort(key,reverse)1参数key:(可选)指定排序规则reverse:(可选)升序降序返回值返回None,同时将原列表排序。也就是没有返回值案例:将列表中的元素排序list1=[1,3,2,5]list1.sort()print(list1)123输出:[1,2,3,5]11、升序降序reverse参数控制排序的「升序」和「降序」,True表示降序、False表示升序;默认升序reverse=Falselist1=[1,3,2,5]list1.sort(reverse=True)print(list1)list1.sort(reverse=False)print(list1)list1.sort()print(list1)1234567输出:[5,3,2,1][1,2,3,5][1,2,3,5]1232、sort()和sorted()的区别接收sort()的返回值,可以发现是Nonelist1=[1,3,2,5]list2=list1.sort()print(list2)123输出:None1打印一下排序前、后的「内存地址」,可以发现地址没有改变list1=[1,3,2,5]print(id(list1))list1.sort()print(id(list1))1234输出:2361470487744236147048774412sort()的设计思想就是「修改」原列表,而不是返回新的列表;它不会创建新的列表,从而节省「效率」;当然,这也意味着原列表被修改了,使用时要留意这一点;sorted()是sort()的扩展函数,可以对列表的元素排序,同时不会修改原列表。list1=[1,3,2,5]list2=sorted(list1)print(list1)print(list2)1234输出:[1,3,2,5][1,2,3,5]12从结果可以看到,sorted()创建了新的列表,用来保存排序后的列表。3、切片排序将原列表「切片」复制给新列表,再对新列表排序,同样可以实现排序且不改变原列表。list1=[1,3,2,5]list2=list1[:]list2.sort()print(list1)print(list2)12345输出:[1,3,2,5][1,2,3,5]12直接「赋值」的方式是不行的,因为赋值的话,两个列表会指向同一个内存地址,原列表会同步变化。list1=[1,3,2,5]list2=list1list2.sort()print(list1)print(list2)12345输出:[1,2,3,5][1,2,3,5]124、指定排序规则key参数可以指定排序「规则」4.1、按字符串长度排序对于元素全是字符串的「列表」,可以按照字符串的「长度」来排序list1=['aaaaa','aa','aaaa','a']list1.sort(key=len)print(list1)123输出:['a','aa','aaaa','aaaaa']1本质上是利用字符串的len()函数计算长度,再排序,如果遇到int这列没有len()函数的元素,就会报错TypeErrorbjectoftype‘int’hasnolen()。4.2、按第二个字符排序对于元素全是字符串的列表,可以按照元素的第几个「字符」排序。list1=['cb','fa','zd','ec']list1.sort(key=lambdax:x[1])print(list1)123输出:['fa','cb','ec','zd']1需要注意的是,所有元素的字符长度都要够数,比如元素只有1个字符,却按照第2个字符排序,函数找不到第2个字符,肯定会报错IndexError:stringindexoutofrange4.3、查找第n大的元素先降序,再按照「索引」取值,就能获取列表中第一大的值或第二大的值等。list1=[4,3,9,6,1]list1.sort(reverse=True)print('最大的元素:',list1[0])print('第二大的元素:',list1[1])1234输出:最大的元素:9第二大的元素:6125、其他类型排序sort()只能对列表排序,而sorted()能对可迭代对象排序;所以,字符串、元组、字典等类型想排序,可以用sorted()str1="312"print(sorted(str1))tuple1=(5,1,3)print(sorted(tuple1))dict1={"key1":1,"key2":2}print(sorted(dict1))12345678输出:['1','2','3'][1,3,5]['key1','key2']123从输出结果可以发现,字符串、元组、字典类型排序后,返回的是列表类型;并且字典只对键排序,不对值排序。
|
|