资讯内容
Python介绍 list.sort方法和内置函数sorted

相关免费学习推荐:python视频教程YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
Python列表排序 list.sort方法和内置函数sortedYiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表.YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
这时候就可以使用list.sort方法和内置函数sorted,本文就是介绍list.sort方法和sorted内置函数的使用方法和区别.YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
一、list.sort方法YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
list.sort方法会就地排序列表,也就是说不会把原列表复制一份。这也是这个方法的返回值是None的原因,提醒您本方法不会新建一个列表。YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
在这种情况下返回None其实是Python的一个惯例:如果一个函数或者方法对对象进行的是就地改动,那它就应该返回 None,好让调用者知道传入的参数发生了变动,而且并未产生新的对象。YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
来看一下代码:YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
# coding=utf-8 list_a = [1, 2, 8, 3, 7, 9, 5, 7] # sort()方法没有返回值 list_b = list_a.sort() print("list_a: ", list_a) print('list_b: ', list_b)运行结果:YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
list_a: [1, 2, 3, 5, 7, 7, 8, 9] list_b: None用返回None来表示就地改动这个惯例有个弊端,那就是调用者无法将其串联起来。而返回一个新对象的方法则正好相反,它们可以链式调用,从而形成连贯接口。YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
二、sorted内置函数YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
与 list.sort 相反,内置函数sorted会新建一个列表作为返回值。YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
这个方法可以接受任何形式的可迭代对象作为参数,甚至包括不可变序列或生成器,而不管sorted接受的是怎样的参数,它**后都会返回一个列表。YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
代码示例:YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
list_c = [1, 2, 8, 3, 7, 9, 5, 7] # sorted内置函数会返回一个排序后的新列表 list_d = sorted(list_c) print("list_c: ", list_c) print('list_d: ', list_d)运行结果:YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
list_c: [1, 2, 8, 3, 7, 9, 5, 7] list_d: [1, 2, 3, 5, 7, 7, 8, 9]可以看到,使用内置函数sorted时,返回了一个新的列表,而原列表没有发生改变。YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
这有两种好处:YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
1.如果我们即需要使用原列表,也需要使用排序后的列表,或者说我们要将一个非列表的可迭代对象排序成列表,sorted都可以做到YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
2.有返回值时,我们可以进行链式调用YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
# 可以对非列表的可迭代对象排序生成列表 str_e = 'python' list_e = sorted(str_e) print(list_e) # 链式调用 str_f = '-'.join(sorted(str_e)).upper().split('-') print(str_f)运行结果:YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
['h', 'n', 'o', 'p', 't', 'y'] ['H', 'N', 'O', 'P', 'T', 'Y']三、关键字参数key和reverseYiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
不管是 list.sort 方法还是 sorted 函数,都有两个可选的关键字参数:YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
key:
接收一个只有一个参数的函数,这个函数会被用在序列里的每一个元素上,所产生的结果将是排序算法依赖的对比关键字。YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
比如说,在对一些字符串排序时,可以用 key=str.lower 来实现忽略大小写的排序,或者是用 key=len 进行基于字符串长度的排序。key的默认值是恒等函数,也就是默认用元素自己的值来排序。YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
reverse:YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
如果被设定为 True,被排序的序列里的元素会以降序输出(也就是说把**大值当作**小值来排序),reverse的默认值是 False.YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
phone = ('HUAWEI', 'OPPO', 'MI', 'MEIZU', 'VIVO') # 按长度进行排序 phone_list = sorted(phone, key=len) print(phone_list) phone_list_re = sorted(phone, key=len, reverse=True) print(phone_list_re)运行结果:YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
['MI', 'OPPO', 'VIVO', 'MEIZU', 'HUAWEI'] ['HUAWEI', 'MEIZU', 'OPPO', 'VIVO', 'MI']上面的代码中,第一次排序新建了一个按照长度排序的字符串列表。第二次排序是将按长度排序由升序变成了降序。YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
细心的您应该可以发现,第二次的结果并不是第一次排序的结果的完全翻转。YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
OPPO和VIVO的长度都是4,reverse=True后,它们的相对位置跟第一次排序是一样的。这是什么原因呢?YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
sorted和list.sort背后的排序算法都是Timsort,它是一种自适应算法,会根据原始数据的顺序特点交替使用插入排序和归并排
序,以达到**佳效率。YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
Python的排序算法Timsort是稳定的(知道这一点就可以了),意思是就算两个元素比不出大小,在每次排序的结果里它们的相对位置是固定的。YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
因为用到的排序算法是稳定的,也就是说在长度一样时,OPPO和VIVO的相对位置不会改变。
关于list.sort()方法和sorted内置函数的使用,现在已经掌握了~YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
相关免费学习推荐:python教程(视频)YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
以上就是Python介绍 list.sort方法和内置函数sorted的详细内容,更多请关注少儿编程网其它相关文章!YiP少儿编程网-Scratch_Python_教程_免费儿童编程学习平台
- 上一篇
认识Python对象自省机制
简介相关免费学习推荐:python视频教程自省是通过一定的机制查询到对象的内部结构。Python中比较常见的自省(introspection)机制(函数用法)有:dir(),type(),hasattr(),isinstance(),通过这些函数,我们能够在程序运行时得知对象的类型,判断对象是否存在某个
- 下一篇
python如何保留2位小数
简介python保留2位小数的方法:首先打开编辑器pycharm,新建变量a;然后利用round函数将a的值保留2位数,并打印结果;接着在窗口中选择run;最后最后运行这个程序即可。本教程操作环境:windows7系统、pycharm2020版,DELLG3电脑,该方法适用于所有