广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python列表排序 list.sort方法和内置函数sorted用法
  • 909
分享到

Python列表排序 list.sort方法和内置函数sorted用法

2024-04-02 19:04:59 909人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表. 这时候就可以使用list.sort方法和内置函数sorted,本文就是介绍list.so

很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表.

这时候就可以使用list.sort方法和内置函数sorted,本文就是介绍list.sort方法和sorted内置函数的使用方法和区别.

一、list.sort方法

list.sort方法会就地排序列表,也就是说不会把原列表复制一份。这也是这个方法的返回值是None的原因,提醒您本方法不会新建一个列表。

在这种情况下返回None其实是python的一个惯例:如果一个函数或者方法对对象进行的是就地改动,那它就应该返回 None,好让调用者知道传入的参数发生了变动,而且并未产生新的对象。

来看一下代码:


# 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)

运行结果:


list_a: [1, 2, 3, 5, 7, 7, 8, 9]
list_b: None

用返回None来表示就地改动这个惯例有个弊端,那就是调用者无法将其串联起来。而返回一个新对象的方法则正好相反,它们可以链式调用,从而形成连贯接口。

二、sorted内置函数

与 list.sort 相反,内置函数sorted会新建一个列表作为返回值。

这个方法可以接受任何形式的可迭代对象作为参数,甚至包括不可变序列或生成器,而不管sorted接受的是怎样的参数,它最后都会返回一个列表。

代码示例:


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)

运行结果:


list_c: [1, 2, 8, 3, 7, 9, 5, 7]
list_d: [1, 2, 3, 5, 7, 7, 8, 9]

可以看到,使用内置函数sorted时,返回了一个新的列表,而原列表没有发生改变。

这有两种好处:

1.如果我们即需要使用原列表,也需要使用排序后的列表,或者说我们要将一个非列表的可迭代对象排序成列表,sorted都可以做到

2.有返回值时,我们可以进行链式调用


# 可以对非列表的可迭代对象排序生成列表
str_e = 'Python'
list_e = sorted(str_e)
print(list_e)
 
# 链式调用
str_f = '-'.join(sorted(str_e)).upper().split('-')
print(str_f)

运行结果:


['h', 'n', 'o', 'p', 't', 'y']
['H', 'N', 'O', 'P', 'T', 'Y']

三、关键字参数key和reverse

不管是 list.sort 方法还是 sorted 函数,都有两个可选的关键字参数:

key:

接收一个只有一个参数的函数,这个函数会被用在序列里的每一个元素上,所产生的结果将是排序算法依赖的对比关键字。

比如说,在对一些字符串排序时,可以用 key=str.lower 来实现忽略大小写的排序,或者是用 key=len 进行基于字符串长度的排序。key的默认值是恒等函数,也就是默认用元素自己的值来排序。

reverse:

如果被设定为 True,被排序的序列里的元素会以降序输出(也就是说把最大值当作最小值来排序),reverse的默认值是 False.


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)

运行结果:


['MI', 'OPPO', 'VIVO', 'MEIZU', 'HUAWEI']
['HUAWEI', 'MEIZU', 'OPPO', 'VIVO', 'MI']

上面的代码中,第一次排序新建了一个按照长度排序的字符串列表。第二次排序是将按长度排序由升序变成了降序。

细心的您应该可以发现,第二次的结果并不是第一次排序的结果的完全翻转。

OPPO和VIVO的长度都是4,reverse=True后,它们的相对位置跟第一次排序是一样的。这是什么原因呢?

sorted和list.sort背后的排序算法都是Timsort,它是一种自适应算法,会根据原始数据的顺序特点交替使用插入排序和归并排序,以达到最佳效率。

Python的排序算法Timsort是稳定的(知道这一点就可以了),意思是就算两个元素比不出大小,在每次排序的结果里它们的相对位置是固定的。

因为用到的排序算法是稳定的,也就是说在长度一样时,OPPO和VIVO的相对位置不会改变。

关于list.sort()方法和sorted内置函数的使用,现在已经掌握了~

补充:python知识点,列表排序sort()和sorted()的区别?

sort()是列表类型的方法,只适用于列表;sorted()是内置函数,支持各种容器类型。它们都可以排序,且用法类似,但sort()是在原地排序的,不会返回排序后的列表,而sorted()是返回新的排序列表。


>>> help(list.sort)
Help on method_descriptor:
sort(...)
 L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
>>> help(sorted)
Help on built-in function sorted in module builtins:
sorted(iterable, /, *, key=None, reverse=False)
 Return a new list containing all items from the iterable in ascending order.
 A custom key function can be supplied to customize the sort order, and the
 reverse flag can be set to request the result in descending order.

本文仅简单介绍排序用法。

例如列表L:


>>> L = ['python', 'shell', 'Perl', 'Go', 'PHP']

使用sort()和sorted()排序L,注意sort()是对L直接原地排序的,不是通过返回值来体现排序结果的,所以无需赋值给变量。而sorted()则是返回排序后的新结果,需要赋值给变量才能保存排序结果。


>>> sorted(L)
['Go', 'php', 'Perl', 'python', 'shell']
>>> L
['python', 'shell', 'Perl', 'Go', 'PHP']
>>> L.sort()
>>> L
['Go', 'PHP', 'Perl', 'python', 'shell']

不难发现,sort()和sorted()默认都是升序排序的(A<B<...<Z<a<b<...<z)。它们都可以指定参数reverse=True来表示顺序反转,也就是默认得到降序:


>>> L.sort(reverse=True)
>>> L
['shell', 'python', 'Perl', 'PHP', 'Go']

在python 3.x中,sort()和sorted()不允许对包含不同数据类型的列表进行排序。也就是说,如果列表中既有数值,又有字符串,则排序操作报错。

sort()和sorted()的另一个参数是key,它默认为key=None,该参数用来指定自定义的排序函数,从而实现自己需要的排序规则。

例如,上面的列表不再按照默认的字符顺序排序,而是想要按照字符串的长度进行排序。所以,自定义这个排序函数:


>>> def sortByLen(s):
...  return len(s)

然后通过指定key = sortByLen的参数方式调用sort()或sorted(),在此期间还可以指定reverse = True:


>>> L = ['shell', 'python', 'Perl', 'PHP', 'Go']
>>> sorted(L,key=sortByLen)
['Go', 'PHP', 'Perl', 'shell', 'python']
5
>>> L.sort(key=sortByLen,reverse=True)
>>> L
['python', 'shell', 'Perl', 'PHP', 'Go']

再例如,按照列表每个元素的第二个字符来排序。


def f(e):
 return e[1]
L = ['shell', 'python', 'Perl', 'PHP', 'Go']
sorted(L, key=f)
L.sort(key=f)

更多的排序方式,比如指定两个排序依据,一个按字符串长度升序排,长度相同的按第2个字符降序排。用法其实很简单,不过稍占篇幅,所以本文不解释了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

--结束END--

本文标题: Python列表排序 list.sort方法和内置函数sorted用法

本文链接: https://www.lsjlt.com/news/121654.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python列表排序 list.sort方法和内置函数sorted用法
    很多时候我们获取到一个列表后,这个列表并不满足我们的需求,我们需要的是一个有特殊顺序的列表. 这时候就可以使用list.sort方法和内置函数sorted,本文就是介绍list.so...
    99+
    2022-11-11
  • Python列表排序 list.sort的用法和内置函数sorted的用法是什么
    本篇内容主要讲解“Python列表排序 list.sort的用法和内置函数sorted的用法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python列表排序 list.sort的用法和内...
    99+
    2023-06-14
  • Python中的list.sort()方法和函数sorted(list)
    目录1.sort()方法2.sorted()函数3.可选参数4.优先级排序5.闭包修改标志变量6.闭包修改标志变量2, 新增nonlocalsorted的关键字排序1.sort()方...
    99+
    2022-11-11
  • Python 列表排序方法reverse、sort、sorted详解
    python语言中的列表排序方法有三个:reverse反转/倒序排序、sort正序排序、sorted可以获取排序后的列表。在更高级列表排序中,后两中方法还可以加入条件参数进行排序。 reverse...
    99+
    2022-06-04
    详解 方法 列表
  • Python列表排序方法reverse、sort、sorted详解
    python语言中的列表排序方法有3个: reverse反转/倒序排序 sort正序排序 sorted可以获取排序后的列表 在更高级列表排序中,后两中方法还可以加入条件参数进行排...
    99+
    2022-11-12
  • python使用sorted函数对列表进行排序
    在python中使用sorted函数对列表进行排序的方法sorted:sorted()函数的作用是对所有可迭代的对象进行排序操作。sorted()函数语法:sorted(iterable, key=None, reverse=False) ...
    99+
    2022-10-22
  • Python 内置函数sorted()的用法
    对于Python内置函数sorted(),先拿来跟list(列表)中的成员函数list.sort()进行下对比。在本质上,list的排序和内建函数sorted的排序是差不多的,连参数...
    99+
    2022-11-13
  • 使用Python的sorted()函数对列表进行排序
    使用Python的sorted()函数对列表进行排序Python是一种功能强大的编程语言,提供了许多内置的函数和方法来帮助开发人员处理不同的任务。其中一个非常有用的函数是sorted()函数,它可以用于对列表进行排序。sorted()函数接...
    99+
    2023-11-18
    Python sorted() 列表排序
  • python数组排序方法之sort、sorted和argsort详解
    目录引言sort 和 sorted 的区别如下用法实例1.升序排序2.降序排序3.如果不想要排序后的值,想要排序后的索引,可以这样做4.字符串类型排序5.二维数组排序6.二维数组获取...
    99+
    2022-11-13
  • 怎么用Python内置函数降序排列
    在Python中使用内置函数进行降序排列的方法使用sort()函数语法:list.sort(cmp=None, key=None, reverse=False)注:cmp:可选参数, 如果指定了该参数会使用该参数的方法进行排序。key:主要...
    99+
    2022-10-18
  • 怎么用Python内置函数升序排列
    在Python中使用内置函数进行升序排列的方法使用sorted()函数语法:sorted(iterable, cmp=None, key=None, reverse=False)注:iterable:可迭代对象。cmp:比较的函数,这个具有...
    99+
    2022-10-18
  • python中的sorted()函数和sort()方法怎么用
    这篇文章主要讲解了“python中的sorted()函数和sort()方法怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中的sorted()函数和sort()方法怎么用”吧...
    99+
    2023-06-29
  • 关于Python列表元素排序操作sort()、min()、max()函数用法
    列表对象中提供了 sort0 方法,该方法用于对原列表中的元素进行排序,排序后原列表中的元素顺序将发生改变。 其语法格式如下: listname.sort(key=None, rev...
    99+
    2023-05-17
    Python列表 Python列表元素排序 Python列表函数
  • Python通过内置函数和自写算法DFS实现排列组合
    目录调用内置函数自写算法DFS实现排列组合是数学中的一种常见的计算方法,用于求出从给定的元素中选取若干个元素的所有可能的排列或组合。在Python中,有多种方式可以实现排列组合的计算...
    99+
    2023-05-18
    Python 算法 Python 排列组合
  • Python列表append()函数使用方法详解
    目录1. 基本使用2. 任意类型元素3. 列表同步3.1 原理剖析3.2 解决方案4. append()与extend()的区别总结1. 基本使用 append() 函数可以向列表末...
    99+
    2022-11-11
  • python列表中remove()函数的使用方法
    python列表中remove()函数的使用方法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 基本使用remove() 函数可以删除列表中的指定元素语法list.re...
    99+
    2023-06-22
  • python内置函数和内置方法有什么区别
    python中内置函数与内置方法的区别有以下几种作用域不同内置函数的作用域:从函数调用开始至函数执行完成,返回给调用者后,在执行过程中开辟的空间会自动释放,也就是说函数执行完成后,函数体内部通过赋值等方式修改变量的值不会保留,会随着返回给调...
    99+
    2022-10-18
  • Python内置函数——__import__ 的使用方法
    __import__() 函数用于动态加载类和函数 。 如果一个模块经常变化就可以使用 __import__() 来动态载入。 语法 __import__ 语法: __import__(name[, ...
    99+
    2022-06-04
    使用方法 函数 Python
  • python列表中remove()函数的使用方法详解
    目录1.基本使用2.删除普通类型元素3.删除对象类型元素4.一次只删一个元素5、Python列表的remove方法的注意事项总结1. 基本使用 remove() 函数可以删除列表中的...
    99+
    2022-11-12
  • Python内置函数—vars的具体使用方法
    本文文章主要介绍了Python内置函数—vars的具体使用方法,分享给大家,具体如下: 英文文档: vars([object]) Return the __dict__ attribute for a ...
    99+
    2022-06-04
    使用方法 函数 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作