您的位置:首页 > 编程语言 > Python开发

python进阶学习笔记-sort()方法和sorted()函数对列表内元素排序

2020-06-04 07:16 387 查看

sort()方法和sorted()函数定义

sort() 方法会就地排序列表,也就是说不会把原列表复制一份再去排序,而是在原序列内进行修改。所以,这个方法是不能用于不可变序列的,比如元组。
sorted()函数会新建一个列表作为返回值。这个方法可以接受任何形式的可迭代对象作为参数,甚至包括不可变序列或生成器。但不管sorted 接受的是怎样的参数,它最后都会返回一个新的列表。

可以看到两者一个是方法,一个是函数,有什么不同呢?
函数

  1. 封装了一些独立的功能,可以直接调用,能将一些数据(参数)传递进去进行处理,然后返回一些数据(返回值),也可以没有返回值。可以直接在模块中进行定义使用。
  2. 函数是直接写文件中而不是class中
  3. 函数的调用:函数的调用是直接写:函数名(函数参数1,函数参数2,…)

方法

  1. 方法和函数类似,同样封装了独立的功能,但是方法是只能依靠类或者对象来调用的。
  2. 方法是只能写在class中
  3. 方法的调用:方法是通过:对象.方法 调用的(这里是指对象方法)

sort()方法和sorted()函数的使用

sort()方法用法:list_name.sort(key=key_name,reverse=True/False),括号内可以不设定参数,直接按照默认值排序
sorted()函数用法:sorted(list_name,key=key_name,reverse=True/False),括号内可以不设定参数,直接按照默认值排序

可以看到,不管是 sort() 方法还是 sorted ()函数,都有两个可选的关键字参数:reverse和key。

reverse:如果被设定为 True,被排序的序列里的元素会以降序输出(就是从大到小的顺序输出)。但这个参数的默认值是 False(默认按从小到大的顺序输出)。
key:指定排序规则,指定了要按照什么排序。比如说,在对一些字符串排序时,可以用key=str.lower 来实现忽略大小写的排序,或者是用 key=len 进行基于字符串长度的排序。这个参数的默认值是恒等函数,也就是默认用元素自己的值来排序,比如说如果是单词的话,默认根据字母顺序去排序。
(可选参数 key 还可以在内置函数 min() 和 max() 中起作用。另外,还有些标准库里的函数也接受这个参数,像 itertools.groupby() 和 heapq.nlargest()等。)

eg:

>>> fruits = ['grape', 'raspberry', 'apple', 'banana']
>>> sorted(fruits)   #将列表传入sorted()函数中
['apple', 'banana', 'grape', 'raspberry'] #新建了一个按照字母排序的字符串列表
>>> fruits
['grape', 'raspberry', 'apple', 'banana'] #原列表并没有变化
>>> sorted(fruits, reverse=True)
['raspberry', 'grape', 'banana', 'apple'] #按照字母降序排序
>>> sorted(fruits, key=len)
['grape', 'apple', 'banana', 'raspberry'] #新建一个按照长度排序的字符串列表。因为这个排序算法是稳定的,grape 和 apple 的长度都是 5,它们的相对位置跟在原来的列表里是一样的
>>> sorted(fruits, key=len, reverse=True)
['raspberry', 'banana', 'grape', 'apple'] #按照长度降序排序的结果。结果并不是上面那个结果的完全翻转,因为用到的排序算法是稳定的,也就是说在长度一样时,grape 和 apple 的相对位置不会改变
>>> fruits
['grape', 'raspberry', 'apple', 'banana'] #直到这一步,原列表 fruits 都没有任何变化
>>> fruits.sort() #对原列表就地排序,fruits列表就相当于一个实例
>>> fruits
['apple', 'banana', 'grape', 'raspberry'] #此时 fruits 本身被排序

持续更新中,如果存在哪些问题,希望大家能及时指出,我一定会及时修改!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: