博客
关于我
python关于sorted排序函数详细解析 附实战代码(全)
阅读量:798 次
发布时间:2023-03-08

本文共 2146 字,大约阅读时间需要 7 分钟。

Python 排序函数实战解析

1. 基本函数

在编程中,排序是日常工作中常用到的功能之一。在 Python 中,sorted() 函数可以帮助我们对列表或其他可迭代对象进行升序或降序排序。这个函数的使用方法在 Python 2 和 Python 3 中有所不同,需要特别注意。

1.1 Python 2 中的 sorted 函数

Python 2 中的 sorted 函数的原型如下:

sorted(iterable, cmp=None, key=None, reverse=False)

参数说明:

  • iterable:可迭代的对象(如列表、元组、字典等)
  • cmp:比较函数,返回值为 1、-1 或 0,用于自定义比较逻辑
  • key:指定排序的关键字函数
  • reverse:指定排序顺序(默认为升序,False)

示例:

list = [3, 1, 2]  
sorted_list = sorted(list, key=lambda x: x, reverse=True)
# 输出:[3, 1, 2]

1.2 Python 3 中的 sort 函数

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]

2. 参数讲解(Python 3)

2.1 reverse 参数

通过 reverse 参数可以指定排序顺序。默认为升序(False),设置为 True 则为降序:

list = ['m', 'a', 'n', 'o', 'n', 'g']  
list.sort(reverse=True)
# 输出:['g', 'n', 'o', 'n', 'm', 'a']

2.2 cmp 参数(Python 2 只)

在 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 转换。

2.3 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)]

3. 实战解析

3.1 日期排序

在实际项目中,我们可能需要对日期进行排序。可以通过将日期字符串转换为时间戳来实现:

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']

3.2 Web 项目中的排序

在 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/

你可能感兴趣的文章
python函数
查看>>
python----线程、进程、协程的区别及多线程详解
查看>>
python---5
查看>>
python---使用celery分布式系统异步发送短信(云通讯)来验证登录
查看>>
python--003--百分号字符串拼接、format
查看>>
Python--10、线程
查看>>
Python--Redis实战:第四章:数据安全与性能保障:第4节:复制
查看>>
python--基本代码规范
查看>>
Python--抽象类接口类
查看>>
PYTHON--欧拉习题二
查看>>
python--高级应用总结
查看>>
python-520表白代码,我看谁说程序员不懂浪漫,送你几套表白代码,一步到位
查看>>
Python-Asyncio TypeError:无法在‘;等待‘;表达式中使用对象DICT
查看>>
Python-AttributeError:‘;dict&39;对象没有属性‘;序列‘;
查看>>
Python-ldap:是否可以在不显式写入密码的情况下进行绑定?
查看>>
python出现 unknown encoding: idna 的处理方法
查看>>
Python出现 RuntimeError: dictionary changed size during iteration 的解决方法
查看>>
Python-numpy(2)数组的操作
查看>>
Python-Numpy的tile函数用法
查看>>
python-open函数
查看>>