
在Python中,排序的方法有多种,其中最常用的是使用内置的 sort()
方法和 sorted()
函数,接下来我将通过各种案例带领大家轻松学会这两种方法,同时还会扩展一些实用的排序案例模板代码。
sort()
方法是列表(List)对象的一个方法,它会直接对原列表进行排序,不返回新的列表。这意味着它会改变原列表的顺序,该方法只能作用于列表。
语法格式:
列表对象.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']
注意:
# 错误使用 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(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']
sorted()
函数是Python的一个内置函数,它会返回一个新的已排序列表,而不会改变原列表,sorted函数功能强大,可以对所有可迭代对象,如:字符串、元祖等进行排序,并返回一个排序后的列表
语法格式: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'],返回了一个排序后的列表
语法格式: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')]
总结:
我们在日常开发中,经常会将一些数据,如:文本、图片、视频、音频等按顺序命名存放在某个文件夹下,当需要通过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函数用法内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!