韩漫免费漫画在线观看方法,《好好疼爱里面》免费看,年轻漂亮的女士护士内衣,妈妈醉酒后把我当爸爸电视剧

文章 > 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包等。

关注

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

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

18岁的少女与狗高清电视剧| 嫂嫂让小叔子帮忙生孩子电视剧| 八戒八戒在线看免费观看电视剧| 《慈母夜吟》完整版| 开会桌下把荫蒂添的好多水| 干婚是什么意思| 苍井空そら无码AV人妻电影| B站夫妻进入高峰期需要多久| 国精产品偷偷偷拍XXXX| 星空电影在线观看免费完整版| 女人尝试到更粗大的心理变化| 白色变态蕾丝超薄开档连身袜| 水蜜桃| 羞答答在线观看免费高清电视剧 | 杓怎么读| 九九在线观看免费播放大全电视剧| 日本免费SAAS CRM| 小莹客厅激情38章至50章一区..| 激吻视频| 私人教练1982年美国| 欧美黑粗大硬巴XXOO| 真人做运动视频素材| 免费的行情网站WWW下载大全| 双乳被十几个男人吃奶| 《大度》韩版免费| 开会也一直放里面老板的| 金银瓶4葡萄熟了| 女人大阴屑夹缝是明虚还是阳虚| 免费观看已满十八岁电视剧日剧| 保姆的特殊待遇5| 免费的行情网站WWW下载大全| 免费网站在线观看人数在哪省| 欧美大妈LOGO大全| 门卫老李干了校花琦琦| 三人成虎| 成品PPT网站大片入口 | 成品人和精品人的区别在哪里知乎| 老师我好爽再深一点老师好涨| 天美麻花星空免费观看电视1| 暴躁姐姐BGM国语版| 《法国空乘9》