python sorted排序函数 作者:马育民 • 2024-03-23 10:54 • 阅读:10013 # 说明 Python列表有一个 `list.sort()` 方法可以直接修改原列表对象进行排序 Python还内置了一个 `sorted()` 函数对可迭代对象排序并返回新的列表对象 # 普通排序 特点:原列表的元素顺序不改变,返回一个新列表,新列表是重新排序的 ``` sorted([5, 2, 3, 1, 4]) ``` 执行结果: ``` [1, 2, 3, 4, 5] ``` # key参数 `sorted()` 函数有 `key`参数,key形参的值应该是一个函数,它接受一个参数并返回一个用于排序的键 ``` students = [('李雷', 185),('韩梅梅', 160),('lucy', 172)] def getKey(item): return item[1] res = sorted(students, key=getKey) # res = sorted(students, key=lambda student: student[2]) print(res) ``` 执行结果: ``` [('韩梅梅', 160), ('lucy', 172), ('李雷', 185)] ``` # reverse 倒序参数 `reverse = True` 表示倒序 ``` a = [5, 2, 3, 1, 4] res = sorted(a,reverse=True) print(res) ``` 执行结果: ``` [5, 4, 3, 2, 1] ``` # 自定义排序 ### 提出问题 文件名如下: ``` files = ['10.py','20.py','2.py','1.py','3.py'] ``` 对文件名,按照数字的顺序进行排序,用上面的方法就无法实现 ``` sorted(files) ``` 执行结果: ``` ['1.py', '10.py', '2.py', '20.py', '3.py'] ``` `10.py, 20.py`应该排在后面 ### 解决 使用自定义排序 ### 代码 ``` from functools import cmp_to_key files = ['10.py','20.py','2.py','1.py','3.py'] # a是第二个元素,b是第一个元素 def cmp(a,b): # 截取文件名 pos = a.rfind(".") a = a[:pos] pos = b.rfind(".") b = b[:pos] # 比较文件名长度 if len(a) > len(b): return 1 elif len(a) < len(b): return -1 # 交换位置 else: # 长度相等时,比较数字大小 ai = int(a) bi = int(b) if ai > bi: return 1 elif ai < bi: return -1 # 交换位置 else: return 0 # 表示相等 res = sorted(files,key = cmp_to_key(cmp)) print(res) ``` 原文出处:http://malaoshi.top/show_1IX7NMxHgwqW.html