大家好,这里是长弓
前几篇我们学习了python的基础语法和函数
开发应用时,我们都期望一个较高的开发效率及较少的代码量
因此,今天我们来学python的高级特性
文章图片
目录
切片
list与tuple切片
str切片
迭代
列表生成式
生成器和迭代器
生成器
迭代器
切片 list与tuple切片 我们之前学习了list和tuple,常常需要提取其中的元素,我们实践一下
我们先看前两行,最基础的,我们构建一个新list,从L中取出元素放进去
文章图片
但这个方法是不可以延申的,比如我们想取出3个数据,或4个数据呢?
我们可以使用下面循环的方法,只需要改变n的数值,便可以对应取出的元素
【python|python高级特性】但每次都写这串代码,未必太过琐碎了,因此人们想出了更好的方法,切片
文章图片
文章图片
这便是L = ['张三','李四','王五','赵六']的切片操作,我们知道list可以从下标取出对应元素,,L[0:3]就是取出,下标为0,1,2的元素,即不包括3.第二行说明为0时可省略。
list[-1]是list中的最后一个元素,这里也可以使用,L[-2:]就是倒数第二个元素到最后一个元素,L[-2:-1]则又是最后一个元素前,故不包含'赵六'。
str切片 最后,不仅是list和tuple可以进行切片操作,str字符串类型也可以
文章图片
第一种是读取前4个元素,第二个是隔3个元素一读取。
文章图片
最后,我们可以想想为什么叫它切片呢?
比如这个 'ABCDEFG'[:4],我们在源数据整体取了一部分,可不就像从火腿上切了一片下来(这里数据太少应该叫切段)
文章图片
迭代 第二部分是迭代,那什么是迭代呢
我们通过for...in语句访问list或tuple中元素的过程就是迭代
add = [1,2,3,4,5] for x in add: print(x)
这个过程就是迭代,但不仅限于list结构
那什么数据可以迭代呢?如何判断呢?
我们需要调用collections.abc
模块的Iterable
类型
文章图片
这里说明字符串和list,tuple都可以进行迭代
这里要注意大小写,否则会如上报错
文章图片
之前我们使用for迭代都是一个元素,它也可以一次多个元素
文章图片
列表生成式 我们有时构建一些特殊的数列,比如[1,3,5,7,9]
我们凭借之前学的的知识先来实现一下
文章图片
但如果我们想构建[1,3,5,7,9]的平方呢?
文章图片
我们可以引申第二种方式来做
文章图片
但为了简化这一流程,便有了列表生成式
文章图片
一行代码就能搞定
文章图片
上述的列表生成式较之for...in,只是多了个x*x,我们还可以添加if判断
文章图片
修改前面的x*x,我们可以生成之前的[1,3,5,7,9]
文章图片
生成器和迭代器 生成器 我们上边学习了如何用列表生成式生成列表
但当我们数据很多时,如果调用时候一次生成整个list,对内存是极不友好的
我们只期望调出我们需要的一部分数据,这就是生成器产生的原因
文章图片
generator就是生成器,因此我们使用G来表示,只需要将列表生成器的[]改成()即可
我们通过next(生成器名)访问元素
文章图片
这里同样注意不要越界访问,否则报错
文章图片
也可以使用我们上边讲的迭代来遍历生成器
文章图片
我们上边讲了生成器的普通用法,那么今天给大家留一个问题
生成器在函数中是如何使用的?欢迎大家在评论区评论
文章图片
迭代器 我们上边讲了迭代,可以被for迭代的称作可迭代对象:Iterable
我们可以通过isinstance()接口判断一个数据类型是否为可迭代对象
list
、tuple
、dict
、set
、str,
generator都是可迭代对象
而能被next()
函数调用并不断返回下一个值的对象称为迭代器:Iterator
那我们可得如图两者关系
文章图片
比如list
、dict
、str虽是可迭代对象,却不是迭代器
那他们可以使用next()吗?
文章图片
答案是还有机会,我们使用iter()可将其变成迭代器
文章图片
文章图片
今天的内容就分享完了
期待积极评论
大家下次再见......???????
推荐阅读
- python|python函数
- python|Python绘制概率曲线三
- python|Python绘制概率曲线二
- Python|Python绘制概率曲线一
- 软件安装|MongoDB下载安装教程(Windows)
- 软件安装|最新Anaconda3的安装配置教程
- Python|Ubuntu18.04下使用Anaconda安装opencv4
- Anaconda问题|Anaconda安装OpenCV的方法
- 各种小问题|Anaconda安装opencv3.4.3