Exp2:求两个list的交集 。
测试数组:a = [1,2,3,4,5],b = [2,4,6,8,10] 。
方法一
方法二
方法一耗时0.9507264000000006s,方法二耗时0.6148200999999993s,性能提升35.33%
关于set()的语法:|、、-分别表示求并集、交集、差集 。
我们可以通过多种方式对序列进行排序 , 但其实自己编写排序算法的方法有些得不偿失 。因为内置的sort()或sorted()方法已经足够优秀了,且利用参数key可以实现不同的功能,非常灵活 。二者的区别是sort()方法仅被定义在list中,而sorted()是全局方法对所有的可迭代序列都有效 。
Exp3:分别使用快排和sort()方法对同一列表排序 。
测试数组:lists = [2,1,4,3,0] 。
方法一
方法二
方法一耗时2.4796975000000003s ,方法二耗时0.05551999999999424s , 性能提升97.76%
顺带一提,sorted()方法耗时0.1339823999987857s。
可以看出,sort()作为list专属的排序方法还是很强的,sorted()虽然比前者慢一点,但是胜在它“不挑食”,它对所有的可迭代序列都有效 。
扩展 :如何定义sort()或sorted()方法的key
1.通过lambda定义
2.通过operator定义
operator的itemgetter()适用于普通数组排序,attrgetter()适用于对象数组排序
3.通过cmp_to_key()定义,最为灵活
Exp4:统计字符串中每个字符出现的次数 。
测试数组:sentence='life is short, i choose python' 。
方法一
方法二
方法一耗时2.8105250000000055s,方法二耗时1.6317423000000062s , 性能提升41.94%
列表推导(list comprehension)短小精悍 。在小代码片段中,可能没有太大的区别 。但是在大型开发中,它可以节省一些时间 。
Exp5:对列表中的奇数求平方,偶数不变 。
测试数组:oldlist = range(10) 。
方法一
方法二
方法一耗时1.5342976000000021s ,方法二耗时1.4181957999999923s ,性能提升7.57%
大多数人都习惯使用+来连接字符串 。但其实,这种方法非常低效 。因为,+操作在每一步中都会创建一个新字符串并复制旧字符串 。更好的方法是用join()来连接字符串 。关于字符串的其他操作,也尽量使用内置函数 , 如isalpha()、isdigit()、startswith()、endswith()等 。
Exp6:将字符串列表中的元素连接起来 。
测试数组:oldlist = ['life', 'is', 'short', 'i', 'choose', 'python'] 。
方法一
方法二
方法一耗时0.27489080000000854s , 方法二耗时0.08166570000000206s,性能提升70.29%
join还有一个非常舒服的点,就是它可以指定连接的分隔符,举个例子
life//is//short//i//choose//python
Exp6:交换x,y的值 。
测试数据:x, y = 100, 200 。
方法一
方法二
方法一耗时0.027853900000010867s ,方法二耗时0.02398730000000171s,性能提升13.88%
在不知道确切的循环次数时,常规方法是使用while True进行无限循环,在代码块中判断是否满足循环终止条件 。虽然这样做没有任何问题,但while 1的执行速度比while True更快 。因为它是一种数值转换 , 可以更快地生成输出 。
Exp8:分别用while 1和while True循环 100 次 。
方法一
方法二
方法一耗时3.679268300000004s,方法二耗时3.607847499999991s ,性能提升 1.94%
将文件存储在高速缓存中有助于快速恢复功能 。Python 支持装饰器缓存,该缓存在内存中维护特定类型的缓存,以实现最佳软件驱动速度 。我们使用lru_cache装饰器来为斐波那契函数提供缓存功能,在使用fibonacci递归函数时,存在大量的重复计算 , 例如fibonacci(1)、fibonacci(2)就运行了很多次 。而在使用了lru_cache后,所有的重复计算只会执行一次,从而大大提高程序的执行效率 。
推荐阅读
- js调用函数只有前面那个有效,js调用函数的几种方法
- ie8下载,ie8下载文件在哪
- asp.net里弹出消息框,net 弹出对话框
- 关闭手机屏幕qq怎么也关闭了,关闭手机屏幕怎么也关闭了呢
- linux命令图形化 linux 设置图形化启动
- pg数据库的copy,pg数据库的游标循环
- ios软件迅雷,ios迅雷app
- go语言开源技巧 go语言 开源项目
- 路由器器怎么改路由器名字,路由器改4g插卡路由器