国产成人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包等。

关注

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

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

妈妈在家穿超薄内裤的注意事项| 叔嫂春药山洞小说| 女生把球球给男生抓的视频| 美女溜溜身子视频素材高清| 文豪1978| 麻豆| 《再来一次好吗》免费观看 | 《炸裂吧!巨棒》免费阅读漫画| 老翁玩嫩媳| 压在窗户上C给别人看窗前视频 | 国产一区| 《漾出OVER FLOWER》| 双乳被四个男人吃奶| 成人韩国三色眼影| 上门女婿-母三女全文免费阅读| 九九在线观看免费播放大全电视剧 | 麻豆蜜桃69无码专区在线 | 小柔与王叔的第一次相遇是第几集| 大夜| 亲密时男人最想听女人说什么| 麻豆蜜桃69无码专区在线| 老头跪在两腿之间吃奶| 粘液共生1~3集免费观看动漫| 法国巜做爰的禁忌1| 午马影视免费观看电视剧| 7777777亚洲和欧洲尺码表 | 小妹妹爱大棒棒免费观看电视剧动..| 少妇激情偷公乱140章| 女人吃男人鸡要多久恢复| 打扑克免费高清视频| 《性房纵欲》在线观看| 三男一女CP免费观看电视剧大全| 年经继拇3| 19岁大学生少女免费观看电视剧| 搞笑视频| 黑科网 今日黑科| 两头婚是啥意思| 金铃铛| 兄弟的老婆4免费观看电视剧| 小俊在雪姨身上耕耘小说免费阅读 | 敌伦交换小敏小静小雅第1集