dataframe for循环 筛选_Python循环12种超强写法,又快又省内存

0 前言

说到处理循环,我们习惯使用for, while等,比如依次打印每个列表中的字符:

42b943b77b4d58afc614cddaf67291bf.png

在打印内容字节数较小时,全部载入内存后,再打印,没有问题。可是,如果现在有成千上百万条车辆行驶轨迹,叫你分析出其中每个客户的出行规律,堵车情况等,假如是在单机上处理这件事。

你可能首先要面临,也可能被你忽视,最后代码都写好后,才可能暴露出的一个问题:outofmemory, 这在实际项目中经常遇到。

这个问题提醒我们,处理数据时,如何写出高效利用内存的程序,就显得很重要。今天,我们就来探讨如何高效利用内存,节省内存同时还能把事情办好。

其实,Python已经准备好一个模块专门用来处理这件事,它就是itertools 模块,这里面几个函数的功能其实很好理解。

我不打算笼统的介绍它们所能实现的功能,而是想分析这些功能背后的实现代码,它们如何做到高效节省内存的,Python内核的贡献者们又是如何写出一手漂亮的代码的,这很有趣,不是吗?

OK,let's go. Hope you enjoy the journey!

1 拼接元素

itertools 中的chain 函数实现元素拼接,原型如下,参数*表示个数可变的参数

chain(iterables)

应用如下:

019c0e7bf59022293eb78e3d92d48b47.png

哇,不能再好用了,它有点join的味道,但是比join强,它的重点在于参数都是可迭代的实例。

那么,chain如何实现高效节省内存的呢?chain大概的实现代码如下:

33d44cd3f2c8109e5d1bb1856bd3bf22.png

以上代码不难理解,chain本质返回一个生成器,所以它实际上是一次读入一个元素到内存,所以做到最高效地节省内存。

2 逐个累积

返回列表的累积汇总值,原型:

accumulate(iterable[, func, *, initial=None])

应用如下:

587d69ff76adc0eab1b031de3690cae1.png

accumulate大概的实现代码如下:

1cd1ad18e48175b43472ac2236f46214.png

以上代码,你还好吗?与chain简单的yield不同,此处稍微复杂一点,yield有点像return,所以 yield total那行直接就返回一个元素,也就是iterable的第一个元素,因为任何时候这个函数返回的第一个元素就是它的第一个。又因为yield返回的是一个generator对象,比如名字gen,所以next(gen)时,代码将会执行到 for element in it:这行,而此时的迭代器it 已经指到iterable的第二个元素,OK,相信你懂了!

3 漏斗筛选

它是compress 函数,功能类似于漏斗功能,所以我称它为漏斗筛选,原型:

compress(data, selectors)

8eb153312b26c474259d1f7806c1d176.png

容易看出,compress返回的元素个数等于两个参数中较短的列表长度。

它的大概实现代码:

f8802140eba38c8111ee35db556b5fb6.png

这个函数非常好用

4 段位筛选

扫描列表,不满足条件处开始往后保留,原型如下:

dropwhile(predicate, iterable)

应用例子:

f220804c1515d7238d2ed96a07aa3d44.png

实现它的大概代码如下:

9e30a5f069d3bfd59b0c2dbb6b91418d.png

5 段位筛选2

扫描列表,只要满足条件就从可迭代对象中返回元素,直到不满足条件为止,原型如下:

takewhile(predicate, iterable)

应用例子:

376177bcc285f152949781b9db1d98bd.png

实现它的大概代码如下:

6 次品筛选

扫描列表,只要不满足条件都保留,原型如下:

dropwhile(predicate, iterable)

应用例子:

c3e0da410a6c30d644be5951d7cb8e93.png

实现它的大概代码如下:

b09a9927c7262e0ba59375febac90cd4.png

7 切片筛选

Python中的普通切片操作,比如:

96118f54866b31ab4181999040127128.png

它们的缺陷还是lis 必须全部载入内存,所以更节省内存的操作islice,原型如下:

islice(iterable, start, stop[, step])

应用例子:

630d44aa1eddf3248a9db92825044638.png

实现它的大概代码如下:

1e1c8050d389b88ca942c1031d3235f3.png

巧妙利用生成器迭代结束时会抛出异常StopIteration,做一些边界处理的事情。

8 细胞分裂

tee函数类似于我们熟知的细胞分裂,它能复制原迭代器n个,原型如下:

tee(iterable, n=2)

应用如下,可以看出复制出的两个迭代器是独立的

e52c4c72cf72441f63e1f2a230654854.png

实现它的代码大概如下:

ac86677c0f474080d98003eb6d77bcba.png

tee 实现内部使用一个队列类型deques,起初生成空队列,向复制出来的每个队列中添加元素newval, 同时yield 当前被调用的mydeque中的最左元素。

9 map变体

starmap可以看做是map的变体,它能更加节省内存,同时iterable的元素必须也为可迭代对象,原型如下:

starmap(function, iterable)

应用它:

6fe3617263acf28e0995b86e9311f8cd.png

starmap的实现细节如下:

9d71fca4a46c1d6c1c9e65c8577350d3.png

10 复制元素

repeat实现复制元素n次,原型如下:

repeat(object[, times])

应用如下:

cb0b5b19d7e4c4cd38884d97d43650be.png

它的实现细节大概如下:

d49de8a3ba0d3925fb5bd546a53780bf.png

11 笛卡尔积

笛卡尔积实现的效果同下:

07a28289cee8cb8b9650e08943d70f22.png

所以,笛卡尔积的实现效果如下:

42fa5090f3e924e91e6e0081207626f3.png

它的实现细节:

0f4e2f05b2095fe8d331051ea3b24723.png

12 加强版zip

组合值。若可迭代对象的长度未对齐,将根据 fillvalue 填充缺失值,注意:迭代持续到耗光最长的可迭代对象,效果如下:

db01e6a7ae92ae4d2bdb9cfa85a70d02.png

它的实现细节:

80377e2d340e6c998f0a539a150f59a3.png

它里面使用repeat,也就是在可迭代对象的长度未对齐时,根据 fillvalue 填充缺失值。理解上面代码的关键是迭代器对象(iter),next方法的特殊性:

daa9518da159344f60a23e9532af480c.png

结合这个提示再理解上面代码,就不会吃力。

对于想学python的小伙伴,我这里整理了一套自己的python系统学习教程,

想要这些资料的可以关注私信“资料”领取资料,希望能对你有所帮助。

本套教程学习时间15天

1-3天内容:为Linux基础命令

4-13天内容:为Python基础教程14-15 天内容:为飞机大战项目演练

ec74c0d0eaadd7b3d970004e426810b0.png

第一阶段(1-3天):

该阶段首先通过介绍不同领域的三种操作系统,操作系统的发展简史以及Linux系统的文件目录结构让大家对Linux系统有一个简单的认识,同时知道为什么要学习Linux命令。然后我们会正式学习Linux命令

1. 文件和目录命令:ls,cd,touch,mkdir,rm

2. 拷贝和移动命令:tree,cp,mv

3. 文件内容命令:cat,more,grep

4. 远程管理命令:ifconfig,ping,SSH的工作方式简介以及ssh命令

5. 用户权限及用户管理命令:chmod,chgrp,useradd,passwd,userdel

6. 软件安装及压缩命令:apt简介及命令,tar,gzip压缩命令,bzip2压缩命令

7. vim的基本使用

第二阶段(4-10天)

该阶段我们正式进入Python这门语言的学习,首先通过了解Python语言的起源,Python语言的设计目标,Python语言的设计哲学,Python语言的优缺点和面向对象的基本概念,以及Python语言的执行方式,还有Python集成开发环境PyCharm的使用为我们接下来的学习做铺垫。

然后我们会学习int,string,float三种简单的变量类型,变量间的计算,变量的输入输出,if判断语句,while循环语句,for循环语句,break和continue的使用,函数的基本使用,模块的使用,列表,元组,字典三种高级变量,字符串的常用操作。

接下来我们会通过一个名片管理系统的案例,把这一阶段的知识进行一个串联。在学习名片管理系统时,首先我们会学习怎么去搭建这一系统的框架,然后我们会分别实现新增名片,显示全部名片,查询名片,删除名片,修改名片这些功能。

最后我们会学习语法的进阶内容,全局变量,局部变量,可变数据类型和不可变数据类型以及函数返回多个值,函数的缺省参数,多值参数,递归的基本使用。

第三阶段(11-13天)

该阶段我们会学习面向对象(OOP)这一重要的编程思想,首先学习的知识点有类和对象的基本概念,dir函数,self的作用,初始化方法__init__,内置函数__str__,__del__,单继承,方法重写,私有属性和方法,多继承,多态,类属性,静态方法。

然后我们还会学习单例模式这一设计模式,异常的捕获,异常的抛出,from import局部导入,from import导入同名工具, from import导入所有工具,包的使用,制作模块,pip的使用以及文件的相关操作。

第四阶段(14-15天)

该阶段是项目演练阶段,我们会带领大家通过使用之前学习过的知识开发飞机大战这一经典游戏,项目中分别有游戏窗口,图像绘制,游戏循环,事件监听,精灵和精灵组以及创建敌机,创建英雄和发射子弹,碰撞检测等模块。

8894ba73465263eddd54711a3e92da87.png

转发文章+私信小编(资料)即可领取以下学习教程!

下面是北京大学毕业的高琪老师亲手打造的python学习路线和视频。共分为7大阶段.

获取在文末!!!

7c10f3183c799016b97009251b9177b9.png

4e3324b7e1794c931ddd33ce0f42586f.png

第一阶段

9bdb29300f84c57db61c1d39bad93870.png

python开发基础和核心特性

1.变量及运算符

2.分支及循环

3.循环及字符串

4.列表及嵌套列表

5.字典及项目练习

6.函数的使用

7.递归及文件处理

8.文件

9.面向对象

10.设计模式及异常处理

11.异常及模块的使用

12.坦克大战

13.核心编程

14.高级特性

15.内存管理

第二阶段

d597050babce84937a1bf2ce073b9f89.png

数据库和linux基础

1.并发编程

2.网络通信

3.MySQL

4.Linux

5.正则表达式

第三阶段

fd736b46b90d513e561d3c3c5b2dd60e.png

web前端开发基础

1.html基本标签

2.css样式

3.css浮动和定位

4.js基础

5.js对象和函数

6.js定时器和DOM

7.js事件响应

8.使用jquery

9.jquery动画特效

10.Ajax异步网络请求

第四阶段

e1c9fd550688e8f1a5a631ea4fe910dd.png

Python Web框架阶段

1.Django-Git版本控制

2.Django-博客项目

3.Django-商城项目

4.Django模型层

5.Django入门

6.Django模板层

7.Django视图层

8.Tornado框架

第五阶段

aed2078bcf674ee6a0d88189ca38e185.png

Python 爬虫实战开发

1.Python爬虫基础

2.Python爬虫Scrapy框架

以上这python自学教程小编已经为大家打包准备好了,希望对正在学习的你有所帮助!

83d96ccd406c706f598512f8e1b3ef6e.png

a7e1f028a7c5aa9ad0dbdc6bd1237b7d.png

老规矩,转发+关注并私信小编:“资料”即可带走哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5文字飞入插件,jquery使用CSS3实现文字动画效果插件Textillate.js

jquery使用CSS3实现文字动画效果插件Textillate.jsTextillate是一款基于CSS3动画效果的 JavaScript 库,您可非常轻轻松地把这些动画效果应该于网页中的任何文字。使用方法引入核心文件构建html标签My Title写入JS,初始化$(function () {$(.tlt).textilla…

工业机器人导轨 百度文库_工业机器人或许开创一个全新的PLC时代

自机器人诞生之日起人们就不断地尝试着说明到底什么是机器人。但随着机器人技术的飞速发展和信息时代的到来,机器人所涵盖的内容越来越丰富,机器人的定义也不断充实和创新。机器人技术作为20世纪人类最伟大的发明之一,自20世纪60年代初问世以…

银联分账与银联代付_第三方分账系统到底有哪些作用?

随着监管越来越严,业务越来越复杂,所有平台电商企业都需要通过第三方分账系统解决支付清算及二清等问题。作为第三方分账系统行业从业者,整理了部分关于系统的相关问题及解答,希望对大家有所帮助。问题一:第三方分账系…

计算机更改桌面,2010年职称计算机考试:更改桌面背景和颜色

Windows XP提供了各种桌面的颜色和背景方案,用户可以根据自己的爱好进行选择。颜 色充当桌面的最底层,背景覆盖于颜色之上。(l)桌面背景的更改在"显示属性"对话框中,选择"桌面"选项卡。在"桌面"选项卡上有一个"背景"列表框,选择列表框…

dell t40 固态系统盘_笔记本怎么安装固态硬盘 笔记本安装固态硬盘教程【详解】...

首先我不得不介绍一下我这古董级别的笔记本 硬件升级,然后给大家介绍一下笔记本安装固态硬盘的教程。dell戴尔1320,cpu t6500 主频2.1ghz 。内存运用了淘汰的ddr2 分别是两条1g,共2g 800频率。这样的古董用的着用固态么?SATA2.0接口完全成为…

如何进入zabbix的wab界面_如何不用光盘重装系统呢?

如果身边没有系统光盘如何重装系统呢?小鱼系统可以帮助你一键重装系统和U盘重装系统的方法,下面一起看下小鱼系统教你的如何不用光盘重装系统吧。一键重装系统方法1、首先请备份好电脑C盘重要资料,然后打开【小鱼系统】,进入电脑环…

全国高中计算机大赛,2019年含金量最大的中小学全国性竞赛活动——五大学科竞赛...

五大学科竞赛历史是我国含金量最高的中小学全国性竞赛活动,在各高校自主招生过程中,具有较高的参考价值。对相关方面有一定兴趣的同学,也可以积极参与。五大赛面向的对象都是高中学生。一、全国中学生数学奥林匹克竞赛此项竞赛的主办单位是中…

单片机红绿灯电路灯有几种_新农村建设的太阳能路灯如何选择?

随着我国城乡一体化发展进程,城乡道路照明已成为新农村建设必不可少的一部分。目前市面通用的道路照明有两种:即市电路灯照明(市电220V)和太阳能路灯照明。安装简便且不需要布线的太阳能路灯在新农村建设中应用广泛,下…

lr不能直接转ps编辑_摄影后期调色软件,Lr软件包

摄影后期调色除了用到PS软件还有一款与之媲美的就是LR软件了,全名是Adobe Lightroom,喜欢拍照的人;总会希望自己拍下来的照片更好看,不管是多好的器材直出的 jpg 本身总会多多少少有一些限制,而利用后期软件可以很好的…

hive中如何把13位转化为时间_重要知识点收藏 | Hive常用函数大全

关系运算1、等值比较: 语法&#xff1a;AB操作类型&#xff1a;所有基本类型描述: 如果表达式A与表达式B相等&#xff0c;则为TRUE&#xff1b;否则为FALSE举例&#xff1a;hive>select 1 from lxw_dual where 11;12、不等值比较: <>语法: A <> B操作类型: 所有…

一加6html查看程序,一加6T评测:极速屏下指纹,解锁你想要的轻快顺滑

【PConline 评测】作为年末旗舰机阵营的新成员&#xff0c;一加6T选在11月5日正式在国内市场亮相。这款充满极客味道的手机早期已经获得了许多海外用户的好评和关注&#xff0c;全新加入的光感屏幕指纹&#xff0c;历来以轻快流畅著称的系统体验&#xff0c;让一加6T再一次成为…

all方法 手写promise_promise.all的实现

今天自己来实现一下promise.all方法的实现; 先来看MDN官网对promise.all方法的介绍: 简单理解,当参数中的promise有一个失败了就直接返回失败的结果,返回第一个失败的结果,都成功返回所有的参数结果; 上代码: function promiseAll(promises){// 返回一个promise实例retu…

七代处理器装win7_为啥新电脑没法装windows7系统?解决方法总会有的

这两年购买新电脑的用户&#xff0c;常常会来问小白问什么不能安装win7系统。之前很多解释都是把矛头直接归咎于主板&#xff0c;但其实这得找Intel&#xff0c;第六代Intel处理器以后所使用的主板(100芯片组系列主板)采用了最新的XHCI主控接口&#xff0c;不再内置win7所需要的…

计算机的服务如何还原,电脑怎么样还原到出厂设置

电脑要还原出厂设置&#xff0c;我们可以重装系统或者重置BIOS设置来实现。下面由学习啦小编为大家整理了电脑怎么样还原到出厂设置的方法步骤&#xff0c;希望对大家有帮助!电脑怎么样还原到出厂设置电脑还原出厂设置的方法一、重装系统1通过百度搜索360安全卫士下载&#xff…

android 已经给权限读取照片 还是提示无法读取照片_iPhone无法访问照片,一招教你解决...

经常使用iOS系统的&#xff0c;在打开软件需要进行加载或者保存图片的时候&#xff0c;却提示无法正常访问照片。这是怎么回事呢&#xff1f;设置教程首先前往【设置】--【隐私】点击【照片】。选择需要进行访问的APP&#xff0c;再点击【读取和写入】。如果觉得不错的话&#…

几何画板手机版_运用几何画板解决动点最值问题(二)

授 课 专 家邵新虎&#xff1a;几何画板课程建设和应用专家&#xff0c;陕西省第十一届基础教育教学成果特等奖获得者&#xff0c;陕西省基础教育教学成果评审专家&#xff0c;陕西师范大学数学与信息科学学院数学教育系列建设专家和讲授专家&#xff0c;国培和省培授课专…

征途2助手网关服务器,【征途2】官方网站-《征途2》夏日激情来袭,清凉一夏版本送限定套装...

昭德三十四年龙泽臣微服出巡时&#xff0c;遭遇大雪封山&#xff0c;绝境之下偶遇神秘隐士&#xff0c;两人连数日拥炭长谈天下时局&#xff0c;互相引为莫逆。归朝后&#xff0c;龙泽臣不日就宣布招百万民夫急建龙牙关。六月&#xff0c;倾举国之力同时南征北伐&#xff0c;此…

航测大数据量处理_揭秘航测局“航空摄影质量自动检查系统”的“黑科技”

前不久&#xff0c;中国科协向全国发布了《2019前沿领域科技成果推介手册》&#xff0c;将当前国内最为前沿的研究成果向社会推介。入选该手册的135项成果&#xff0c;是由相关专家从92个全国学会和地方科协推荐的1000余项前沿领域待转化科技成果中遴选出&#xff0c;突出成果的…

java求最大公约数_10道java经典算法题,小白必备,每一题都能提升你的java能力...

JAVA经典算法跪求关注&#xff0c;祝关注我的人都&#xff1a;身体健康&#xff0c;财源广进&#xff0c;福如东海,寿比南山&#xff0c;早上贵子&#xff0c;从不掉发&#xff01;更多java资料可以私信我领取&#xff01;【程序1】 题目&#xff1a;古典问题&#xff1a;有一对…

华为A1路由器虚拟服务器,华为a1路由器怎么设置 华为路由器a1怎么安装视频-192路由网...

问&#xff1a;华为A1无线路由器怎么设置&#xff1f;买了一台华为A1无线路由器回来&#xff0c;可以不知道怎么设置才能上网&#xff0c;悲剧了&#xff01;&#xff01;答&#xff1a;华为A1无线路由器的设置很简单&#xff0c;可以用手机设置、也可以用电脑来设置。下面小编…