Python循环这样写,高效节省内存100倍!
发布时间:2020-02-27 23:30:08 所属栏目:资源 来源:站长网
导读:0、前言 说到处理循环,我们习惯使用for, while等,比如依次打印每个列表中的字符: 在打印内容字节数较小时,全部载入内存后,再打印,没有问题。可是,如果现在有成千上百万条车辆行驶轨迹,叫你分析出其中每个客户的出行规律,堵车情况等,假如是在单机
![]() 这个函数非常好用 4、段位筛选 扫描列表,不满足条件处开始往后保留,原型如下: 应用例子: 实现它的大概代码如下: 5、段位筛选2 扫描列表,只要满足条件就从可迭代对象中返回元素,直到不满足条件为止,原型如下: 应用例子: 实现它的大概代码如下: 6、次品筛选 扫描列表,只要不满足条件都保留,原型如下: 应用例子: 实现它的大概代码如下: 7、切片筛选 Python中的普通切片操作,比如: 它们的缺陷还是lis 必须全部载入内存,所以更节省内存的操作islice,原型如下: 应用例子: 实现它的大概代码如下: 巧妙利用生成器迭代结束时会抛出异常StopIteration,做一些边界处理的事情。 8、细胞分裂 tee函数类似于我们熟知的细胞分裂,它能复制原迭代器n个,原型如下: 应用如下,可以看出复制出的两个迭代器是独立的 实现它的代码大概如下: tee 实现内部使用一个队列类型deques,起初生成空队列,向复制出来的每个队列中添加元素newval, 同时yield 当前被调用的mydeque中的最左元素。 9、map变体 starmap可以看做是map的变体,它能更加节省内存,同时iterable的元素必须也为可迭代对象,原型如下: 应用它: starmap的实现细节如下: 10、复制元素 repeat实现复制元素n次,原型如下: 应用如下: 它的实现细节大概如下: 11、笛卡尔积 笛卡尔积实现的效果同下: 所以,笛卡尔积的实现效果如下: 它的实现细节: 12、加强版zip 组合值。若可迭代对象的长度未对齐,将根据 fillvalue 填充缺失值,注意:迭代持续到耗光最长的可迭代对象,效果如下: 它的实现细节: 它里面使用repeat,也就是在可迭代对象的长度未对齐时,根据 fillvalue 填充缺失值。理解上面代码的关键是迭代器对象(iter),next方法的特殊性:I 结合这个提示再理解上面代码,就不会吃力。 总结 Python的itertools模块提供的节省内存的高效迭代器,里面实现基本都借助于生成器,所以一方面了解这12个函数所实现的基本功能,同时也能加深对生成器(generator)的理解,为我们写出更加高效、简洁、漂亮的代码打下坚实基础。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |