鱼C论坛

 找回密码
 立即注册
查看: 1841|回复: 4

[技术交流] Python sorted() 函数

[复制链接]
发表于 2020-3-18 13:08:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一个账号 于 2020-3-19 20:51 编辑

Python sorted() 函数


语法
sorted(iterable, /, *, key=None, reverse=False)

参数

参数描述
iterable可迭代对象
key一个函数,将可迭代对象中的每一个元素调用这个函数,用函数的返回值来比较
reverse排序规则,True 降序 , False 升序(默认)


描述

sorted() 函数对所有可迭代的对象进行排序操作。

返回值

返回重新排序的列表。

sort 与 sorted 区别:

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort() 方法是在原列表上操作,而内 sorted() 函数返回的是一个新列表。

通常使用 sort() 的效率比 sorted() 高:
import time

start = time.perf_counter()

[6, 4, 2, 5, 7, 3, 2, 4563, 5, 7, 1, 234, 1234, 456, 345, 1234, 57].sort()

print("sort():", time.perf_counter() - start)

start = time.perf_counter()

sorted([6, 4, 2, 5, 7, 3, 2, 4563, 5, 7, 1, 234, 1234, 456, 345, 1234, 57])

print("sorted():", time.perf_counter() - start)

执行结果:
sort(): 2.699999999966618e-06
sorted(): 4.700000000024129e-06

例子
>>> sorted([1, 5, 3, 2, 7])
[1, 2, 3, 5, 7]
>>> sorted([1, 5, 3, 2, 7], reverse=True)
[7, 5, 3, 2, 1]
>>> sorted("532,4&%!dkjw", reverse=True)
['w', 'k', 'j', 'd', '5', '4', '3', '2', ',', '&', '%', '!']
>>> sorted("532,4&%!dkjw", reverse=False)
['!', '%', '&', ',', '2', '3', '4', '5', 'd', 'j', 'k', 'w']
>>> sorted("123456", key=lambda x: 2 if int(x) % 2 == 0 else 1)  # 将奇数放到前面,因为是从小到大排列
['1', '3', '5', '2', '4', '6']
>>> sorted(["abcd", "ab", "abcdefg", "abcd"], key=len)
['ab', 'abcd', 'abcd', 'abcdefg']

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-19 20:18:17 | 显示全部楼层
相比于time.perf_counter,我更喜欢time.process_time
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 21:37:34 | 显示全部楼层

process_time只记录CPU实际运行时间(其实和perf_counter没啥区别)
>>> from time import perf_counter as perf,process_time as proc,sleep
>>> def tperf():
        t=perf()
        sleep(5)
        return perf()-t

>>> def tproc():
        t=proc()
        sleep(5)
        return proc()-t

>>> tperf()
4.999445299999991
>>> tproc()
0.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-19 21:52:58 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-3-19 21:37
process_time只记录CPU实际运行时间(其实和perf_counter没啥区别)

建议不要使用逗号和在一起导入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-19 21:57:55 | 显示全部楼层
一个账号 发表于 2020-3-19 21:52
建议不要使用逗号和在一起导入

其实我也知道
但懒是挡不住的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 05:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表