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

关注

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

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

《落魄贵族当女仆》樱花动漫 | 情侣打牌生猴子| 欧美人与人动人物2024心理学| 免费的行情网站WWW下载大全| 孕妇| 主人请好好疼爱里面动画第二季 | 黑料社| AAA成人片爽久爽久爽| 法国《口咬》电影完整版| 星空无限MV国产剧入选精彩| 《互换人妻HD中字》| 春闺艳妇(古言)作者:年富一年| 苍老师《荷尔蒙》| 两领导在车上吃我的奶| 狗配人的大片| 欧美大片PPT免费PPT| 借种之灭门惨案2国语版电影 | 旋转木马电动拼插木质科技| 《交换做爰》在线观看| 两个老头把我添高潮了| 日韩大片PPT免费PPT| 美女被捆绑绳子穿过下体 勒胸| 伦理《少妇的滋味》完整版| 撕开她的内裤慢慢摸她的胸| 女人用嘴巴吸出精子会反流吗| 水手服| 美女和男生一起努力的生孩子视频.| 《酒店激战》动漫1-5集免费观..| 致命女人| 蜜桃成熟时2| 李丽珍| 暴躁老阿姨CSGO技能推荐大全 | 女性INS大片跳舞| 《再来一次好吗》免费观看| 小奶球抖动舞蹈视频| 《日本公与媳5》公妇伦| 今日看料-今日看料每日更新| 《司机外遇2》| YSL水蜜桃色号407| 《炸裂吧!巨棒》免费阅读漫画| 学生袜