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年代初问世以…

计算机和互联网基础知识作业,计算机作业1基础知识含答案.doc

计算机作业1基础知识含答案.doc跳到主要内容网络课程学院主页 E-Learning 实验室 联系我们 窗体顶端窗体底端页面路径 首页/ 我的课程/ 计算机应用基础2299/ 主题 2/ 第一次作业 计算机基础知识开始时间 2015 年 10 月 1 日 星期四 1301完成于 2015 年 10 月 1 日 星期四 1435耗…

天津计算机的专科学校,天津市电子计算机职业中等专业学校

天津市电子计算机职业中等专业学校创建于980年,是首批国家级重点职业中专,是国家级中等职业教育改革发展示范学校建设单位天津市职业教育先进单位。办学30多年来,学校本着“以人为本传承发展”的原则,培养面向现代化的复合型人才,取得了很好的办学效益和社会效益,学校实训设备先…

内存超频trfc_内存超频教学

一、前言先说说内存超频的作用,在很多应用里,内存超频能带来显著提升,就比如PUBG、CSGO等FPS游戏,超频后的帧数表现和超频前的帧数表现相差很多。也有很多人觉得超频很麻烦,觉得超频会损害硬件的使用寿命,其…

前端html预览,HTML5 上传前预览

下面是前端之家 f2er.com 通过网络收集整理的代码片段。前端之家小编现在分享给大家,也给大家做个参考。HTML5上传图片预览请选择图片文件:JPG/GIF$("#file0").change(function(){var objUrl getObjectURL(this.files[0]) ;console.log("…

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

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

计算机更改桌面,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)和太阳能路灯照明。安装简便且不需要布线的太阳能路灯在新农村建设中应用广泛,下…

幼儿园计算机课程名称,幼儿园课程建设30:计算机与幼儿园课程的整合(3)

三、怎样将计算机整合于幼儿园课程前文已经谈到,将计算机整合于课程,是要将计算机融合到幼儿园的各种活动,尤其是游戏和教育活动中,并使计算机成为幼儿学习环境的一部分,成为幼儿学习和游戏的一个有机组成部分。而这种…

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

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

哈尔滨工程大学计算机考研分数线2020,哈尔滨工程大学2020考研分数线_哈尔滨工程大学2020考研复试分数线 - 考研营...

哈尔滨工程大学社会工作历年考研分数线哈尔滨工程大学社会工作考研的各位同学,2021年哈尔滨工程大学社会工作研究生复试分数线终于公布了,哈尔滨工程大学社会工作是一个不错的专业,各...2021-07-16哈尔滨工程大学临床医学历年考研分数线哈尔滨…

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…

计算机产品创新设计实践,基于TRIZ的计算机辅助机械产品创新设计研究

摘要&#xff1a;论文以机械产品创新设计和制造为出发点,综合价值工程理论(VE),发明问题解决理论(TRIZ),开发了基于VE/TRIZ的计算机辅助机械产品创新设计软件系统,对指导机械产品创新设计具有重要的理论和实践意义. 论文首先分析了计算机辅助创新的概念,总结了其发展和研究现状…