本文共 2146 字,大约阅读时间需要 7 分钟。
在编程中,排序是日常工作中常用到的功能之一。在 Python 中,sorted() 函数可以帮助我们对列表或其他可迭代对象进行升序或降序排序。这个函数的使用方法在 Python 2 和 Python 3 中有所不同,需要特别注意。
Python 2 中的 sorted 函数的原型如下:
sorted(iterable, cmp=None, key=None, reverse=False)
参数说明:
False)示例:
list = [3, 1, 2] sorted_list = sorted(list, key=lambda x: x, reverse=True) # 输出:[3, 1, 2]
Python 3 中的 sort 函数的原型如下:
sort(*, key=None, reverse=None)
参数与 Python 2 相同,但去除了 cmp 参数。要使用自定义比较函数时,可以使用 functools.cmp_to_key 工具进行转换。
示例:
from functools import cmp_to_key nums = [3, 1, 2] nums.sort(key=cmp_to_key(lambda a, b: -1 if a > b else 1 if a < b else 0)) # 输出:[3, 1, 2]
通过 reverse 参数可以指定排序顺序。默认为升序(False),设置为 True 则为降序:
list = ['m', 'a', 'n', 'o', 'n', 'g'] list.sort(reverse=True) # 输出:['g', 'n', 'o', 'n', 'm', 'a']
在 Python 2 中,cmp 参数可以使用自定义比较函数。示例:
list = [1, 3, 2, 4] list.sort(cmp=lambda a, b: a - b) # 输出:[1, 2, 3, 4]
注意:在 Python 3 中,cmp 参数已被移除,需要使用 functools.cmp_to_key 转换。
通过 key 参数,可以指定排序的关键字函数。例如,可以根据某个字段对列表进行排序:
list = [(2, 2), (3, 4), (4, 1), (1, 3)] list.sort(key=lambda x: x[1]) # 输出:[(4, 1), (2, 2), (1, 3), (3, 4)]
在实际项目中,我们可能需要对日期进行排序。可以通过将日期字符串转换为时间戳来实现:
import datetime def get_timestamp(date): return datetime.datetime.strptime(date, "%Y-%m-%d %H:%M:%S").timestamp()s1 = ['2022-07-11 11:00:00', '2022-07-12 12:00:00', '2022-07-13 13:00:00'] s = sorted(s1, key=lambda date: get_timestamp(date)) # 输出:['2022-07-11 11:00:00', '2022-07-12 12:00:00', '2022-07-13 13:00:00']
在 Web 项目中,我们可能需要对 Redis 数据库中的数据进行排序。例如,可以通过以下方式实现:
from functools import cmp_to_key def get_all_time_appid_names(): projects = list(Project.objects()) sorted_projects = sorted(projects, key=lambda project: project.last_modify_time) result = [] for project in sorted_projects: appid = project.appid if appid or appid is 0: result.append((appid, project.gamename)) return result
其中,Project 是表单中定义的字段值。
转载地址:http://mylfk.baihongyu.com/