【Python基础】Python高级特性:切片、迭代、列表生成式、生成器与迭代器
接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程了。今天的笔记内容是Python高级特性,其中包括快速访问对象类型元素的切片、循环中的迭代意义、方便的列表生成式操作以及生成器和迭代器。虽然有些苦逼,但是一想到数据科学家的远大理想,小编就又能快马加鞭的向前冲了!
>>>>
切片
切片(slice)的功能类似于R语言中的取数或者访问数据对象元素,但R中对象都是向量、矩阵数据框,在Py里面我们切片的作用对象是list、tuple或者dict等数据对象类型。假设一个list如下:
L=['Durant','Curry','Green','James','Erving']
如果我们想取用前3个元素,可以通过list的索引来做,但一旦元素个数过多,通过索引访问的方法就行不通了。当然我们也可以通过写for循环来遍历对象的每个元素。但通常这些方法比起切片来都过于繁琐:
>>> L=[0:3]
['Durant','Curry','Green']
L[0:3]表示从索引0开始取,到索引3为止,但不包括索引3 的元素。如果第一个索引是0,还可以简写为:
>>> L=[:3]
['Durant','Curry','Green']
当然和之前一样,我们也可以倒着访问list对象:
>>> L=[-2:0]
['James','Erving']
切片除了可以作用于list、tuple等对象类型,还可以对字符串等进行切片操作,在字符串中,切片的作用类似于一些字符处理函数,这里就不举例说明了。这样一来,有了切片操作以后,就无需去写循环语句了。
>>>>
迭代
如果我们通过for循环来遍历一个list或者tuple对象,这种遍历过程就可以称之为迭代。只要for循环可以作用的对象类型,我们都可以对其进行迭代操作,如list、tuple或者dict,这些都可以称作可迭代对象。如何判断一个对象是否可迭代?我们可以通过导入collections模块中的Iterable类型进行判断:
>>> from collections import Iterable
>>> isinstance('abc',Iterable)
True
>>> isinstance([1,2,3],Iterable)
True
>>> isinstance(123,Iterable)
False
任何可迭代对象都可作用于for循环,包括我们自定义的数据对象,只要可以作用于for循环,都是可迭代对象。
>>>>
列表生成式
列表生成式(list comprehensions),是Py内置的 一种简单而又非常强大的创建列表的生成式。比方说我们可以用list(range(1:11))来生成1:11的数字列表:
>>> list(range(1:11))
[1,2,3,4,5,6,7,8,9,10]
但如果我们要生成[1x1,2x2,3x3...,10x10]这样的列表又该如何写命令呢?一种方法就是写循环:
>>> L =[]
>>> for x in range(1:11):... L.append(x*x)...
>>> L
[1,4,9,16,25,36,49,64,81,100]
但正如我们前面所说,循环太繁琐,能不用尽量不用,比竟Py的核心要义是简洁,能一行代码完成的事情绝对不用五行。上述循环用列表生成式语句一行即可搞定:
>>> [x * x for x in range(1:11)]
[1,4,9,16,25,36,49,64,81,100]
for循环后面还可加上if条件判断进行结果筛选:
>>> [x * x for x in range(1:11) if x%2==0]
[4,16,36,64,100]
>>>>
生成器
列表生成器虽然方便,但占用内存比较大,很多时候我们都不需要完整list进行分析,因而Py中还有一种边循环边计算的机制,称之为生成器:Generator。创建另一个生成器的方法有很多,但主要还是通过如下两种方法:(1)直接创建法。(2)通过修改Py函数的print命令为yield。
直接创建法很简单,只需将列表生成式中的[ ]符号改成()即可:
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x34031fh479>
输出g的结果表明对象g已经是一个generator了。我们可以通过for循环来访问和调用generator的每一个元素:
>>> g= (x * x for x in range(10))
>>> for n in g:
... print(n)
...
0
1
4
9
16
25
36
49
64
81
另一种创建生成器的方式为修改Py函数中print命令为yield命令即可。例如我们创建一个斐波那契数列表,但列表生成器无法直接生成,编写函数则较为方便:
def fibonacci(max):i, a, b = 0, 0, 1while i < max:print(b)a, b = b, a + bi = i + 1return 'done'
我们修改上面函数定义中的print命令:
def fibonacci(max):i, a, b = 0, 0, 1while i < max:yield ba, b = b, a + bi = i + 1return 'done'
这样一修改,fibonacci就不再是一个普通的函数了,而是一个generator了:
>>> f = fibonacci(6)
>>> f
<generator object fibonacci at 0x104feaaa0>
>>>>
迭代器
由前述我们知道,可以直接作用于for循环的对象我们称之为可迭代对象:Iterable。使用collections模块中的isinstance函数可以判断一个对象是否可迭代。而生成器不但可以作用于for循环,还可以通过next()函数不断返回下一个值,这样的对象我们称之为迭代器,Iterator。
生成器都是迭代器,但list、tuple、dict等对象虽然是可迭代的(Iterable),但却并不是迭代器(Iterator),如要将其变成迭代器,我们可以使用iter函数。我们可以写一个关于杨辉三角的生成器(迭代器):
def triangles():L = [1]while True:yield LL.append(0)L = [L[i-1] + L[i] for i in range(len(L))]
n = 0
for m in triangles():print(m)n = n + 1if n == 10:break[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4. 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
louwill学习参考资料:
廖雪峰老师Python官方教程
http://www.liaoxuefeng.com/
推文为该教程个人学习笔记
往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群请扫码进群:
【Python基础】Python高级特性:切片、迭代、列表生成式、生成器与迭代器相关推荐
- python切片迭代_Python高级特性 切片 迭代解析
切片:方便截取list.tuple.字符串部分索引的内容 正序切片 语法:dlist = doList[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3.即索引0,1,2,正好是3个元素 ...
- Python基础教程:带参装饰器、生成器、迭代器、for循环迭代器、枚举
带参装饰器 装饰器为被装饰的函数添加新功能,需要外界参数 outer参数固定一个,就是func inner参数固定和被装饰的参数固定,也不能添加新参数 可以借助函数的嵌套定义,外层给内层传参 def ...
- 【Python专题】 高级特性
注:该系列内容系廖雪峰大神的<python教程>的学习笔记 目录: 切片 迭代 列表生成式 生成器 迭代器 1.切片 为了简化python中数据集合的取用,python使用slice(切片 ...
- Python高级特性(切片,迭代,列表生成式,生成器,迭代器)
掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n ...
- Python高级特性——切片(Slice)
Python高级特性--切片(Slice) 摘录廖雪峰网站 定义一个list: L = ['haha','xixi','hehe','heihei','gaga'] 取其前三个元素: >> ...
- python里面的高级特性
python里面的高级特性 1.切片(Slice) >>> L[0:3] ['Michael', 'Sarah', 'Tracy'] L[0:3]表示,从索引0开始取,直到索引3为止 ...
- python笔记01_高级特性和函数式编程
高级特性 切片:前10个数,每两个取一个: L[:10:2]:[0, 2, 4, 6, 8] 可迭代对象的判断: isinstance('abc', Iterable) list变成索引-元素对:fo ...
- 【Python基础学习】基本数据结构:列表、元组、栈、字典、集合与队列
[Python基础学习]基本数据结构:列表.元组.栈.字典.集合与队列 Python的基本数据结构中,包含了列表.元组等一系列数组式数据结构,但各个结构各有不同.因此单独列出来,分析相同与不同 列表( ...
- Python基础-面向对象编程之特性(property)
Python基础-面向对象编程之特性property Python面向对象编程之特性(property) 一.统一访问原则 二.使用特性进行拦截操作 三.老式写法 Python面向对象编程之特性(pr ...
- python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值
python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值 一 .函数概念 函数是根据需要,将代码打包为代码块, 每一个代码块就可以封装为一个函数 ...
最新文章
- DOM对象与jquery对象有什么不同
- php数组选择随机元素,php 数组随机选择一个元素显示的简单示例
- 推荐一个Chrome扩展应用,能够自动去除CSDN广告
- 不保留小数php,php怎么实现不保留小数
- STM32软件IIC速度
- ClickHouse SAMPLE 采样子句介绍
- php页面导出csv,使用PHP生成并导出CSV文件
- 希尔排序及手推时间复杂度(java实现)
- Latex的安装与使用
- LearnOpenGL 光照—多光源
- 连接 MySql 数据库
- linux1394b接口,Linux下IEEE1394组网技术研究及实现
- 通过快捷指令GET请求方法登录东华理工校园网
- 信息生态学与语义信息论
- 【c++项目】信息学奥赛数据生成器
- Quartz简介,java编程思想第四版pdf百度云
- Opencv Surf算子中keyPoints,描述子Mat矩阵,配对向量DMatch里都包含了哪些好玩的东东?
- RTK差分共享猫APP后台系统已开源
- 多边形之间的交差并补....
- 传说中Google AdWords黄金账户的标准
热门文章
- @Scheduled(cron = 0/5 * * * * *)将时间改为配置
- Linux安装/升级pip
- SPHINX 文档写作工具安装简要指南 - windows 版 - 基于python
- android应用js
- IDEA启动自动进入最后一个项目
- 亚马逊记AWS(Amazon Web Services)自由EC2应用
- httpclient爬取性感美图
- xfce4 菜单文件
- vue企业项目demo_基于SpringBoot和Vue的企业级中后台开源项目
- 一文读懂CoIP实验:原理、实验流程、遇到的问题