点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

接着廖雪峰老师的学习教程,小编要开始加快推进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]

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

Python高级特性:切片、迭代、列表生成式、生成器与迭代器相关推荐

  1. python切片迭代_Python高级特性 切片 迭代解析

    切片:方便截取list.tuple.字符串部分索引的内容 正序切片 语法:dlist = doList[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3.即索引0,1,2,正好是3个元素 ...

  2. Python高级特性——切片(Slice)

    Python高级特性--切片(Slice) 摘录廖雪峰网站 定义一个list: L = ['haha','xixi','hehe','heihei','gaga'] 取其前三个元素: >> ...

  3. Python高级特性(切片,迭代,列表生成式,生成器,迭代器)

    掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n ...

  4. python 切片_全面解读Python高级特性切片

    大家好,欢迎来到Crossin的编程教室! 众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组-)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slic ...

  5. 定义一个空切片_全面解读Python高级特性切片

    大家好,欢迎来到Crossin的编程教室! 众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串.列表.元组-)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢? 切片(slic ...

  6. Day7 python高级特性-- 切片 Slice

    先举一个例子,取list或tuple中的某几个元素: 1.取 ['a','b','c','d','e','f'] 第1.2.5.6个元素:         >>> a = ['a', ...

  7. python高级特性的学习

    Python的学习 Python的学习 高级特性 切片 迭代 列表生产式 生成器 迭代器 函数式编程 高阶函数 map/reduce filter sorted 返回函数 装饰器 偏函数 模块 使用模 ...

  8. 【Python基础】Python高级特性:切片、迭代、列表生成式、生成器与迭代器

    接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程了.今天的笔记内容是Python高级特性,其中包括快速访问对象类型元素的切片.循环中的迭代意义.方便的列表生成式操作以及生成器和迭代器 ...

  9. python列表生成器语法_Python 列表生成式\生成器

    Python 列表生成式+生成器 一.列表生成式 1.什么是列表生成器 一种可以便捷地生成列表的表达式,有时候可以替换list.append(变量) 2.需求. 如何将列表中的每个数据都加1 列表:d ...

最新文章

  1. python3.6.0安装教程-Python 3.6.0下载及安装教程
  2. mybatis中的TypeAliasRegistry
  3. Java中重写equals()方法时注意点
  4. Boost: 检查underlying_type特性是否有效的测试程序
  5. Python中的支持向量机SVM的使用(有实例项目给的地址)
  6. vue --- 修饰符.lazy、.number、.trim
  7. 在linux上,为什么不用配置环境变量还能运行java程序呢?
  8. JavaScript 拾碎[二] JavaScript 操作cookie 类
  9. 《Fast R-CNN》阅读笔记
  10. signature=73d4f2b7e55a02359b7d1bf362a074d6,SHOCK ABSORBER
  11. zabbix 调用api 批量删除主机
  12. html中怎么给url格式化,如何将文本中的url提取出来格式化,然后将其它的html escape?...
  13. 什么是长连接 | 短连接?
  14. 光棍.com市场推广策划书(爆笑)
  15. DICOM医学图像处理:fo-dicom网络传输之 C-Echo and C-Store
  16. 数据可视化分析教学课件——FineBI实验册节选====物流时效分析
  17. Tampermonkey中文文档
  18. mysql删除某张表三个月前的数据
  19. 大数据——Flink Window(窗口)机制
  20. python实现mysql二叉树_python环境下使用mysql数据及数据结构和二叉树算法(图)...

热门文章

  1. 30分钟看懂XGBoost的基本原理
  2. 资源 | 10x Python开发者必读:本月Python文章TOP 10
  3. Java 和 C 长期霸权结束
  4. 千万不要一辈子靠技术生存
  5. 一文讲解图像插值算法原理!附Python实现
  6. 深入理解XGBoost,优缺点分析,原理推导及工程实现
  7. 作为导师,我希望学生在毕业后主动拉黑我
  8. 【开源】一键生成各种姿势的火柴人gif:在线录制真人视频即可转换
  9. 周志华:“数据、算法、算力”,人工智能三要素在未来还要加上“知识”
  10. 深度学习debug沉思录