举例讲解如何在Python编程中进行迭代和遍历


Posted in Python onJanuary 19, 2016

迭代
首先理解下什么是迭代,python中所有从左往右扫面对象的方式都是可迭代的

有哪些方式是可迭代的:

1.文件操作

   我们读取文件的时候,会用到一个readline()方法,其实它就是一个迭代器,它会返回当前的数据,然后自动的调用内置的next()方法来让文件的读取头自动的移动到当前的下面一行,准备下次的读取,到达文件末尾时,就会返回空字符串.

>>> f=open('hello.py')
>>> f.readline()
'#!/usr/bin/python2.5\n'
>>> f.readline()
'print "hello.word!"\n'
>>> f.readline()
'\n'
>>> f.readline()
''
 
>>> for i in open('hello.py'):
...       print(i)
... 
#!/usr/bin/python2.5
print "hello.word!"

用上面这样方式来读取文件内容的话,速度很快,内存占用也比较低,特别适合操作大文件.

下面这个方式适合操作一些小的文件,速度和效率没有上面的好,所以建议以后操作文件的话,尽量用上面的。

>>> for i in open('hello.py').readlines():
...     print i
... 
#!/usr/bin/python2.5
print "hello.word!"

read方法和readline方法,
read()方法把整个文件的内容放到字符串里
readline()方法则把文件的内容按照行为单位放到列表里。
一般要替换文件里的某个字符的话,最好有readline,然后用循环把一行一行内容循环出来,再查找替换,这样效率比整个读到一个字符串里来查找匹配效果更高。

2 for循环

例如:

>>> for i in range(5):
...    print(i)
...

它中间处理的过程和下面的是一样的:

>>> L=[0,1,2,3,4]
>>> I=iter(L)
>>> I.next()
0
>>> I.next()
1
>>> I.next()
2
>>> I.next()
3
>>> I.next()
4
>>> I.next()
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
StopIteration

每次调用迭代器调用next()方法返回结果,并让文件指针往下移动一行,最后已StopIteration异常结束迭代。

3.列表解析:

相比python for循环速度会快很多

例如:

>>> L=[x+10 for x in range(10)]
>>> L

[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
python会在解释器里对range(10)进行迭代,依次把列表里的内容取出来,赋值给最左边的x,然后执行x+10的操作,
并且把执行好的结果保存在列表里。等range(10)迭代完以后就新生成了一个列表,结果就是[10,11,12,13,14,15,16,17,18,19]
从上面可以看出,这也是建立python 列表的一个方法。

上面例子也可以用for循环来实现.

>>> res=[]
>>> for x in range(10):
...    res.append(x+10)
... 
>>> res
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

从上面可以看出,python列表解析比手动的for 更加精简,而且运行的更快(往往速度回快一倍),因为他们的迭代在解析器内部是以C语言的速度执行的,而不是以手动python代码执行的,特别对于较大的数据集合,这是使用列表解析的一个主要的性能优点.

遍历
1.通过序列取元素的方法进行遍历

root@10.1.6.200:python# vim 3.py
#!/usr/bin/python2.5
for i in 'hello':  #序列里的字符串
  print i,
 
y = [1,2,3,4,5,6]  #列表
for i in y:
  print i,

root@10.1.6.200:python# python 3.py
h e l l o 1 2 3 4 5 6

2.通过序列本身偏移指数(索引)的方法进行遍历

也就是迭代序列索引,注:迭代,重复执行一条指令.

root@10.1.6.200:python# vim 3.py
#!/usr/bin/python2.5
x='hello'
for i in range(len(x)):
  print x[i]
 
y = [1,2,3,4,5,6]
for i in range(len(y)):
  print y[i],
root@10.1.6.200:python# python 3.py
h e l l o 1 2 3 4 5 6

字典有2种方式取到其值:

1.先取字典key,在取索引的值

root@10.1.6.200:python# vim 5.py
#!/usr/bin/python2.5
z = {1:'a',2:'b',3:'c'}
for i in z:
  print z[i]
root@10.1.6.200:python# python 5.py
a
b
c

2.通过字典items方法,获取所有键值对,在利用元组拆分的方法获得对应值.

root@10.1.6.200:python# cat 5.py
#!/usr/bin/python2.5
z = {1:'a',2:'b',3:'c'}
print z.items()
for m,n in z.items():
  print m,n

root@10.1.6.200:python# python 5.py

[(1, 'a'), (2, 'b'), (3, 'c')]
1 a
2 b
3 c
Python 相关文章推荐
Django的URLconf中使用缺省视图参数的方法
Jul 18 Python
Python编程求质数实例代码
Jan 31 Python
Python获取指定文件夹下的文件名的方法
Feb 06 Python
Python Dataframe 指定多列去重、求差集的方法
Jul 10 Python
python得到qq句柄,并显示在前台的方法
Oct 14 Python
在python中实现对list求和及求积
Nov 14 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
python hashlib加密实现代码
Oct 17 Python
Python装饰器实现方法及应用场景详解
Mar 26 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 Python
Django 实现图片上传和下载功能
Dec 31 Python
Python的自动化部署模块Fabric的安装及使用指南
Jan 19 #Python
Python编程中time模块的一些关键用法解析
Jan 19 #Python
Python编程中的文件读写及相关的文件对象方法讲解
Jan 19 #Python
Python使用os模块和fileinput模块来操作文件目录
Jan 19 #Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 #Python
python结合API实现即时天气信息
Jan 19 #Python
Python+django实现文件下载
Jan 17 #Python
You might like
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
PHP数据库开发知多少
2006/10/09 PHP
PHP模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
js实现简单的购物车有图有代码
2014/05/26 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
微信小程序版翻牌小游戏
2018/01/26 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
npm scripts 使用指南详解
2018/10/08 Javascript
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
一个可以套路别人的python小程序实例代码
2019/04/09 Python
Python reduce函数作用及实例解析
2020/05/08 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
CSS3使用多列制作瀑布流
2016/05/10 HTML / CSS
美国传奇滑手Paul Rodriguez创办的街头滑板品牌:Primitive Skateboarding
2019/10/29 全球购物
教学实习自我评价
2014/01/28 职场文书
商场端午节活动方案
2014/01/29 职场文书
数字化校园建设方案
2014/05/03 职场文书
个人收入证明范本
2014/09/18 职场文书
政工师工作总结2015
2015/05/26 职场文书
入党转正介绍人意见
2015/06/03 职场文书
转学证明范本
2015/06/19 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书
少先队大队委竞选口号
2015/12/25 职场文书