国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > Python高级 > 如何优化python的效率

如何优化python的效率

头像

FXL

2020-08-07 09:48:543823浏览 · 0收藏 · 0评论

优化python的效率的方法:1、优化算法时间复杂度;2、减少冗余数据;3、合理使用copy与deepcopy;4、使用dict或set查找元素;5、合理使用生成器(generator)和yield。

优化方法:

(推荐教程:Python入门教程

1、优化算法时间复杂度

算法的时间复杂度对程序的执行效率影响,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1)。

2、减少冗余数据

如用上三角或下三角的方式去保存一个大的对称矩阵。在0元素占大多数的矩阵里使用稀疏矩阵表示。

3、合理使用copy与deepcopy

对于dict和list等数据结构的对象,直接赋值使用的是引用的方式。而有些情况下需要复制整个对象,这时可以使用copy包里的copy和deepcopy,这两个函数的不同之处在于后者是递归复制的。效率也不一样:(以下程序在ipython中运行)

import copy
a = range(100000)
%timeit -n 10 copy.copy(a) # 运行10次 copy.copy(a)
%timeit -n 10 copy.deepcopy(a)
10 loops, best of 3: 1.55 ms per loop
10 loops, best of 3: 151 ms per loop

timeit后面的-n表示运行的次数,后两行对应的是两个timeit的输出,下同。由此可见后者慢一个数量级。

4、使用dict或set查找元素

python dict和set都是使用hash表来实现(类似c++11标准库中unordered_map),查找元素的时间复杂度是O(1)

a = range(1000)
s = set(a)
d = dict((i,1) for i in a)
%timeit -n 10000 100 in d
%timeit -n 10000 100 in s
10000 loops, best of 3: 43.5 ns per loop
10000 loops, best of 3: 49.6 ns per loop

dict的效率略高(占用的空间也多一些)。

5、合理使用生成器(generator)和yield

%timeit -n 100 a = (i for i in range(100000))
%timeit -n 100 b = [i for i in range(100000)]
100 loops, best of 3: 1.54 ms per loop
100 loops, best of 3: 4.56 ms per loop

使用()得到的是一个generator对象,所需要的内存空间与列表的大小无关,所以效率会高一些。在具体应用上,比如set(i for i in range(100000))会比set([i for i in range(100000)])快。

但是对于需要循环遍历的情况:

%timeit -n 10 for x in (i for i in range(100000)): pass
%timeit -n 10 for x in [i for i in range(100000)]: pass
10 loops, best of 3: 6.51 ms per loop
10 loops, best of 3: 5.54 ms per loop

后者的效率反而更高,但是如果循环里有break,用generator的好处是显而易见的。yield也是用于创建generator:

def yield_func(ls):
for i in ls:
yield i+1
 def not_yield_func(ls):
return [i+1 for i in ls]
 ls = range(1000000)
%timeit -n 10 for i in yield_func(ls):pass
%timeit -n 10 for i in not_yield_func(ls):pass
10 loops, best of 3: 63.8 ms per loop
10 loops, best of 3: 62.9 ms per loop

对于内存不是非常大的list,可以直接返回一个list,但是可读性yield更佳(人个喜好)。

python2.x内置generator功能的有xrange函数、itertools包等。

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

叶子湄| 少女哔哩唑哩免费高清观看2| 白丝脚上的浓浓的精华液能用吗 | 白日梦我小说| 《高压监狱3》法国版正版| 交替轮换4| 无码人妻久久一区二区| 黄金网站APP免费| 公日日躁我和公乱小说| 恋爱之瘾电影完整版在线观看免费| 宝贝今天可不可以不带小雨伞小说| 成版人黄瓜视频APP| 28影视网| 雨后小故事GIF| 电影《满足2》完整版在线观看| ALLEY| 医生含着我的奶边摸边做视频 | 《性房纵欲》在线观看| 放荡的女兵伦理2| 蜜桃2| 萧阳| 男女睡过以后谁更想念| BOBO浏览器(海外版)| 在线天堂WWW在线观看图片| 《少妇》6| 蜜汁樱桃》免费阅读全文小说| 麻花传剧原创MV在线看完整版高.| 王局长把乳罩解开吃胸的动态图| 《不戴套瑜伽教练3》| 把腿扒开让我添30分钟| 电影《满足2》完整版在线观看| 电影《满足2》完整版在线观看| 《黏糊糊的你》动漫免费观看| 美女和男生一起努力的生孩子视频..| 韩国吻戏视频| 成品人和精品人的区别哪个好| 星空传媒天美传媒有限公司| 公媳欢情沈曼最新童节更新| 舞蹈生带着小玩具练芭蕾视频| 《强壮的公2做爱观看| 134VCC影院免费观看