洗礼灵魂,修炼python(15)--列表进阶话题—>列表解析/列表生成器
是的,我是想到什么知识点就说什么,没有固定的主题,我的标题都是在写完博客再给的。本篇博文说说列表进阶话题。其实列表应该是比较熟悉的了,而毫不夸张的说,在实际的开发中,列表也是使用的最多的,以后你会体会到我说的这句话的。
列表解析
1.什么是列表解析:
根据已有列表,高效生成新列表的方式,还有另一个叫法是叫列表推导式
2.作用:
列表解析是python迭代机制的一种应用,它常用于实现创建新的列表,因此要放置在列表中
3.格式:
[expr for iter in iterable]
4.实际运用:
例题:返回1到10的所有数的平方:
注意:我使用的的是python2,如果你是用的是python3,需要加括号的,还有,列表解析是用的使用中括号,不是小括号
是不是很简单的就生成了我们想要的结果?
这里用到一个内置函数range(),前面提到没有我也忘了(是的,我也有任性的时候/滑稽),在这里详细讲解一下:
range([start,] stop[,step=1]):中括号表示这两参数可选,Step=1表示第三个参数的值默认值是1
range这bif(内置函数)的作用是生成一个从start参数的值开始到stop参数的值结束的数字序列
例:
由这个例子得到一个知识点,注意:range函数,第二个参数不包括其中,默认从0开始(是不是有点像索引)
也可以和切片一样添加步长来返回:
好,我想你已经对列表解析有个大概了解了,再看一个列子:
返回1到10的所有偶数:
注意:列表解析,整个过程中,每一小段代码不用冒号或者逗号隔开,直接是空格隔开
再看几个综合练习题:
1).用列表解析生成100内的大于20的偶数(请用两种写法)
2).用列表解析生成100内的大于20的偶数的平方
3).用列表解析输出结果:[1 love python,2 love python,3 love python,.... 10 love python]
4).用列表解析的方法返回某一磁盘路径下相同后缀名文件组成的列表
这里使用了os模块和字符串的endswith方法,os模块后面会解析
好,列表解析完了,其实很简单对不对?
列表生成器
1.什么是列表生成器:
概念和列表解析差不多,根据已有列表,以生成器的方式生成一个列表。生成器是迭代器的一种实现
2.作用:
返回一个生成器对象,并不真正创建列表
3.格式:
(expr for iter in iterable)
4.实际运用:
例题:返回1到10的所有数的平方:
是的,我想你应该看出列表生成器和列表解析的不同了
注意:
1.列表生成器使用的是小括号,列表解析是用的是中括号哦
2.列表生成器不能直接输出,换句话生成器对象不能直接输出
3.如果要输出,则必须使用生成器对象的next()方法一一返回
4.当生成器对象返回完则会报错
说到列表生成器,那不得不提到生成器关键词—yield
yield:是为在函数内使用的生成器语法,一旦程序里有yield,则被定义为生成器
例:
这里使用了自定义函数的语法,姑且不管,后面会详解。因为知识都是相连的,所以避免不了穿插后面的知识。
发现没?使用yield关键词就会把函数变为一个生成器对象
其实说道生成器和列表解析,就和range()函数与xrange()函数一样
range()函数前面说了,不再解释。xrange每次返回一个数值,和range不同
例:
综合实例:
有没有发现,哎,这啥情况对吧?怎么next方法不顶用了,老师返回1啊,其实不是,是因为:
列表生成器一次知返回一个值,由于不能多次调用生成器,一位内每调用一次,内存ID就会变化一次,所以,一般赋值给另一变量来进行一一返回
列表解析和列表生成器综合使用
1.列表解析功能强大,但很占用资源,列表生成器只返回一个值,但占用小,所以酌情选择
2.例:用生成器和解析结合实现1到10的平方数除以2的结果:
注意:在这里外层和内层的i的引用,其实并不冲突的,但尽量少用,有些地方是有冲突的
3.生成器也可以转换为列表:
4.例
好,列表进阶话题完结,留下几个课后练习自己练习
课后作业:
1.使用列表解析输出结果:[(0,0),(0,2),(2,0),(2,2)]
2.使用列表生成器打印斐波那契数列
3.使用列表解析生成列表[1x2,3x4,5x6,7x8,…,99x100]
4.利用3层for循环的列表生成式,找出对称的3位数,例如:121等从左到右从又到左还是原来的对称数
5.编写一个函数,它接受一个list,然后把list中的所有字符串变成大写后返回,非字符串元素将被忽略
洗礼灵魂,修炼python(15)--列表进阶话题—>列表解析/列表生成器的更多相关文章
- 洗礼灵魂,修炼python(16)--列表进阶话题—>上节作业讲解+copy模块,浅拷贝,深拷贝
上节课后作业: 1.使用列表解析输出结果:[(0,0),(0,2),(2,0),(2,2)] 方法1: 方法2: 方法3: 2.使用列表生成器打印斐波那契数列 3.使用列表解析生成列表[1x2,3x4 ...
- 洗礼灵魂,修炼python(6)--活起来的代码+列表
活起来的用法: 使用input内置函数 注意python2中和python3中,input函数是不太一样的,python2中,input用户传入什么类型就是什么类型而python3中,不管传入什么类型 ...
- 洗礼灵魂,修炼python(85)-- 知识拾遗篇 —— 深度剖析让人幽怨的编码
编码 这篇博文的主题是,编码问题,老生常谈的问题了对吧?从我这一套的文章来看,前面已经提到好多次编码问题了,的确这个确实很重要,这可是难道了很多能人异士的,当你以为你学懂了,在研究爬虫时你发现你错了, ...
- 洗礼灵魂,修炼python(69)--爬虫篇—番外篇之feedparser模块
feedparser模块 1.简介 feedparser是一个Python的Feed解析库,可以处理RSS ,CDF,Atom .使用它我们可从任何 RSS 或 Atom 订阅源得到标题.链接和文章的 ...
- 洗礼灵魂,修炼python(24)--自定义函数(5)—匿名函数lambda
在这个互联网时代,大家都喜欢匿名,匿名上网,匿名登录,匿名操作等等,都不喜欢实名对吧?(虽然说现在实名制已经快到来,题外话,扯远了),当然python里也有个不喜欢实名的,它的功效优点特殊,说强大吧? ...
- 洗礼灵魂,修炼python(79)--全栈项目实战篇(7)—— 多级目录菜单之地址管理系统升级版
要求: 1.在上一篇的地址管理系统的基础上做升级改动 2.添加增删改的功能 3.尽量的贴近生活常识中的地址管理 分析: 需求不用多说了,干就完了 相关文件源码地址:github 这次由于要有增删改的操 ...
- 洗礼灵魂,修炼python(78)--全栈项目实战篇(6)—— 多级目录菜单之地址管理系统
相信各位都在在网上买过东西吧?那么今天我的主题就是写个在线购物系统,是不可能的,哈哈(后期确实有这个项目),那么购物都填写过快递地址吧?然后网上查个地址都有地址管理吧? 要求: 1.打印出省.市.县等 ...
- 洗礼灵魂,修炼python(10)--有趣的判断分支+从实例中掌握循环语句
所有的编程语言里都有判断语句和循环语句. 判断语句则是用来分支程序流程的 循环语句则是为了实现一个效果,让程序的规律性的重复操作 不用说,分支和循环自然在python里也是有的 一,条件判断:if,i ...
- python面向对象编程进阶
python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...
随机推荐
- oracle中常见的对表、表空间和视图的操作
创建表:create table t1(key1 type default 0,key2 type not null) 删除表:drop table t1; 删除表数据:truncate table ...
- 使用 Portainer UI 管理 Docker 主机
Docker 使用命令行的方式来管理有时候并没有那么直观,可以使用 Portainer 的 UI 来管理 Docker 主机和 Docker Swarm 集群. 安装 Portainer 环境:cen ...
- Golang标准库——io-结构
结构 LimitedReader 定义 限制从Reader中读取的字节数. type LimitedReader struct { R Reader // underlying reader N in ...
- 用RIPv2实现网络区域的互通
1.动态路由的分类: DV协议:距离矢量协议 距离矢量:路由器只能够知道邻居路由的信息 LS协议:链路状态协议 链路状态:路由器能够知道所在协议内的所有信息 RIP协议的全程是:路由信息协议(DV协议 ...
- 从零开始学 Web 之 jQuery(一)jQuery的概念,页面加载事件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- Spring Boot 解决方案 - 会话
连接无状态 使用 HTTP 的连接是无状态的,因此为了应对需要状态的服务例如用户登录,诞生了适合保存状态的设计-会话(session),本文就来探讨一下会话. 会话的使用 Spring Mvc 中使用 ...
- 【学习笔记】深入理解async/await
参考资料:理解javaScript中的async/await,感谢原文作者的总结,本文在理解的基础上做了一点小小的修改,主要为了加深自己的知识点掌握 学完了Promise,我们知道可以用then链来解 ...
- 【转】 Apk文件及其编译过程
Apk文件概述 Android系统中的应用程序安装包都是以apk为后缀名,其实apk是Android Package的缩写,即android安装包. 注:apk包文件其实就是标准的zip文件,可以直接 ...
- 解决SharePoint 2010拒绝访问爬网内容源错误
今天发现SP爬网出现了问题,持续时间蛮长的,一直爬不到内容. 解决方案: 这里有一条解决在SharePoint 2010搜索爬网时遇到的"拒绝访问错误"的小技巧. 首先要检查默认内 ...
- MVC 的 Razor引擎显示代码表达式与隐式代码表达式
隐式代码表达式 就是一个标识符,之后可以跟任意数量的方法调用("()").索引表达式("[]")及成员访问表达式(".").但是,除了在&q ...