python中常用排序操作sort方法和sorted函数的使用超详细讲解(内置模板代码!)

 更新时间:2025年02月07日 09:38:35   作者:盲敲代码的阿豪  
这篇文章主要介绍了Python中的排序方法,包括sort()方法和sorted()函数的使用,sort()方法用于列表,对原列表进行排序,文章还提供了一些排序案例模板代码,以解决实际问题,需要的朋友可以参考下

前言

在Python中,排序的方法有多种,其中最常用的是使用内置的 sort() 方法和 sorted() 函数,接下来我将通过各种案例带领大家轻松学会这两种方法,同时还会扩展一些实用的排序案例模板代码。

1、sort()方法的使用

sort() 方法是列表(List)对象的一个方法,它会直接对原列表进行排序,不返回新的列表。这意味着它会改变原列表的顺序,该方法只能作用于列表。

1.1 基础操作

语法格式:

列表对象.sort(reverse=False),升序排序,默认不写reverse参数,为升序排序

列表对象.sort(reverse=True),降序排序

案例1:让列表中的元素升序排序

# 列表中的元素都为为数字类型
my_list = [5, 2, 9, 1, 5, 6]
my_list.sort()  # 默认升序排序,
print(my_list)  # 输出: [1, 2, 5, 5, 6, 9]

# 列表中的元素都为字符串类型
words = ["apple", "orange", "banana", "pear"]
words.sort()
print(words)  # 输出: ['apple', 'banana', 'orange', 'pear']

案例2:让列表中的元素降序排序

# 列表中的元素都为为数字类型
my_list = [5, 2, 9, 1, 5, 6]
my_list.sort(reverse=True)  # 降序排序,可以传递 reverse=True 参数
print(my_list)  # 输出: [9, 6, 5, 5, 2, 1]

# 列表中的元素都为字符串类型
words = ["apple", "orange", "banana", "pear"]
words.sort(reverse=True)
print(words)  # 输出: ['pear', 'orange', 'banana', 'apple']

注意:

  • 列表中的元素必须为同一数据类型,才可以进行排序,否则会报错
  • sort 方法只能作用于列表对象,不能直接跟在数据后面,否则会返回None;如:
# 错误使用
my_list = [5, 2, 9, 1, 5, 6].sort() # sort方法不能直接跟在数据后面使用
print(my_list) # 输出:None

# 正确使用
my_list = [5, 2, 9, 1, 5, 6]
my_list.sort()  # 默认升序排序,
print(my_list)  # 输出: [1, 2, 5, 5, 6, 9]
  • 当列表中的元素为字符串时,sort() 方法会根据字符串的 Unicode 码点进行排序,具体来说,字符串的排序是逐字符比较的:
    1、比较两个字符串的第一个字符,根据它们的 Unicode 码点值排序。
    2、如果第一个字符相同,则比较第二个字符,依此类推。
    3、如果所有字符都相同,则两个字符串被认为是相等的。

1.2 操作进阶(自定义排序的对象)

语法格式:列表对象.sort(reverse=,key=函数名)我们通过key参数接收一个函数,该函数会在列表中的每个元素上调用,通过对函数返回的结果进行排序;该函数可以是匿名函数、自定义函数或内置函数。

案例1:使用内置函数进行排序

# 按字符串长度升序排序(适用于字符串列表)
words = ["apple", "banana", "cherry", "date"]
words.sort(key=len)  # key后面跟上函数名
print(words)  # 输出: ['date', 'apple', 'banana', 'cherry']

案例2:使用匿名函数进行排序

# 对包含元组的列表按第二个元素排序
tuple_list = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
tuple_list.sort(reverse=True,key=lambda x: x[1]) # 直接在key后面跟上匿名函数
print(tuple_list)  # 输出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

案例3:使用自定义函数进行排序

# 自定义函数
def custom(s): # 这里s用于接收列表中的元素
    return len(s) # 返回列表中每个元素的长度,通过长度进行排序

words = ["apple", "banana", "cherry", "date"]
words.sort(key=custom) 
print(words) # 输出: ['date', 'apple', 'banana', 'cherry']

2、sorted()函数的使用

sorted()函数是Python的一个内置函数,它会返回一个新的已排序列表,而不会改变原列表,sorted函数功能强大,可以对所有可迭代对象,如:字符串、元祖等进行排序,并返回一个排序后的列表

2.1 基础操作

语法格式:sorted(可迭代对象,reverse=)参数说明:

reverse=False,升序排序,默认不写为升序排序

reverse=True,降序排序

案例:

# 对列表进行升序排序
my_list = [5, 2, 9, 1, 5, 6]
sorted_list = sorted(my_list)  # 默认升序排序
print(sorted_list)  # 输出: [1, 2, 5, 5, 6, 9]
print(my_list)  # 输出: [5, 2, 9, 1, 5, 6],原列表未被改变

# 如果你想降序排序,可以传递 reverse=True 参数
sorted_list_desc = sorted(my_list, reverse=True)
print(sorted_list_desc)  # 输出: [9, 6, 5, 5, 2, 1]

# 对字符串进行升序排序
strs = '136297'
new_strs = sorted(strs)
print(new_strs) # 输出:['1', '2', '3', '6', '7', '9'],返回了一个排序后的列表

2.2 操作进行(自定义排序的对象)

语法格式:sorted(可迭代对象,reverse=,key=函数名)无论是sort()方法还是sorted()函数,都可以接受一个key参数,用于指定一个函数,这个函数会在每个列表元素上调用,排序将基于返回的结果进行。

案例:

# 按字符串长度排序(适用于字符串列表)
words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=len)  # key后面跟上函数名
print(sorted_words)  # 输出: ['date', 'apple', 'banana', 'cherry']

# 对包含元组的列表按第二个元素排序
tuple_list = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
sorted_tuple_list = sorted(tuple_list, key=lambda x: x[1])
print(sorted_tuple_list)  # 输出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

总结:

  • sort方法和sorted()函数的使用操作相同,但sort()方法只能作用于列表,而sorted()方法可以作用于所有可迭代对象
  • sort()方法是在原列表对象上进行排序,不会生成新的列表;而sorted()函数在对可迭代对象进行排序后,会生成一个新的列表

3、扩展:排序案例模板代码

我们在日常开发中,经常会将一些数据,如:文本、图片、视频、音频等按顺序命名存放在某个文件夹下,当需要通过python来处理这些数据时,通常会获取每个文件的路径并存放到一个列表中,这时我们若对这个列表进行排序,会出现一些问题,如下:

问题案例:

image_paths = ['D:/image/1.png','D:/image/3.png','D:/image/5.png','D:/image/2.png','D:/image/4.png',
               'D:/image/10.png','D:/image/7.png','D:/image/8.png','D:/image/9.png','D:/image/6.png',
               'D:/image/11.png']
image_paths.sort() # 升序排序
print(image_paths)

输出结果:

['D:/image/1.png', 'D:/image/10.png', 'D:/image/11.png', 'D:/image/2.png', 'D:/image/3.png', 'D:/image/4.png', 'D:/image/5.png', 'D:/image/6.png', 'D:/image/7.png', 'D:/image/8.png', 'D:/image/9.png']

说明:从上面的结果可以看到,我们原本是打算将路径按1、2、3、4…进行升序排序,但返回的结果却不是如此,造成这种问题的原因是因为sort()方法和sorted()函数在对字符串进行排序的时候是按每个字符的unicode码点值进行排序的,因此我们需要对数据做一些处理,再进行排序,这里可以使用key参数来解决这个问题

解决方法模板代码:

# 对列表中的元素进行升序排序
image_paths = ['D:/image/1.png','D:/image/3.png','D:/image/5.png','D:/image/2.png','D:/image/4.png',
               'D:/image/10.png','D:/image/7.png','D:/image/8.png','D:/image/9.png','D:/image/6.png',
               'D:/image/11.png']

# 自定义函数
def sort_key(s):
    # 使用切片获取数字部分,并将其转换为整数进行排序
    return int(''.join(filter(str.isdigit, s)))

# 1、使用soted()函数
new_image_paths = sorted(image_paths, key=sort_key)
print(new_image_paths)

# 2、使用sort()方法
image_paths.sort(key=sort_key)
print(image_paths)

# 两种方法返回的结果相同

输出结果:

['D:/image/1.png', 'D:/image/2.png', 'D:/image/3.png', 'D:/image/4.png', 'D:/image/5.png', 'D:/image/6.png', 'D:/image/7.png', 'D:/image/8.png', 'D:/image/9.png', 'D:/image/10.png', 'D:/image/11.png']
['D:/image/1.png', 'D:/image/2.png', 'D:/image/3.png', 'D:/image/4.png', 'D:/image/5.png', 'D:/image/6.png', 'D:/image/7.png', 'D:/image/8.png', 'D:/image/9.png', 'D:/image/10.png', 'D:/image/11.png']

总结 

到此这篇关于python中常用排序操作sort方法和sorted函数使用的文章就介绍到这了,更多相关python排序sort方法和sorted函数用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python文件绝对路径写法介绍(windows)

    python文件绝对路径写法介绍(windows)

    今天小编就为大家分享一篇python文件绝对路径写法介绍(windows),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python对象转换为json的方法步骤

    Python对象转换为json的方法步骤

    这篇文章主要介绍了Python对象转换为json的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Python验证用户密码是否规范脚本示例

    Python验证用户密码是否规范脚本示例

    对用户密码的强度进行校验,要求用户密码达到一定的强度,符合安全性要求,这篇文章主要给大家介绍了关于Python验证用户密码是否规范的相关资料,需要的朋友可以参考下
    2024-05-05
  • Django基于ORM操作数据库的方法详解

    Django基于ORM操作数据库的方法详解

    这篇文章主要介绍了Django基于ORM操作数据库的方法,结合实例形式总结分析了Django使用ORM操作数据库的相关配置、增删改查等相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • Python开发常用五种循环方式的场景性能比较

    Python开发常用五种循环方式的场景性能比较

    Python是一门高级编程语言,其拥有多种循环方式,如for循环、while循环、do-while循环等。本文将逐个分析Python所有的循环执行效率和适用场景,需要的可以参考一下
    2023-04-04
  • 深度学习小工程练习之tensorflow垃圾分类详解

    深度学习小工程练习之tensorflow垃圾分类详解

    这篇文章主要介绍了练习深度学习的一个小工程,代码简单明确,用来作为学习深度学习的练习很适合,对于有需要的朋友可以参考下,希望大家可以体验到深度学习带来的收获
    2021-04-04
  • python3编写ThinkPHP命令执行Getshell的方法

    python3编写ThinkPHP命令执行Getshell的方法

    这篇文章主要介绍了python3编写ThinkPHP命令执行Getshell的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 使用Python开发SQLite代理服务器的方法

    使用Python开发SQLite代理服务器的方法

    今天小编就为大家分享一篇使用Python开发SQLite代理服务器的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python实现将excel文件转化成CSV格式

    python实现将excel文件转化成CSV格式

    下面小编就为大家分享一篇python实现将excel文件转化成CSV格式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Pytorch中torch.cat()函数举例解析

    Pytorch中torch.cat()函数举例解析

    一般torch.cat()是为了把多个tensor进行拼接而存在的,下面这篇文章主要给大家介绍了关于Pytorch中torch.cat()函数举例解析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12

最新评论