举例讲解如何在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 相关文章推荐
numpy自动生成数组详解
Dec 15 Python
Python语言快速上手学习方法
Dec 14 Python
利用python脚本如何简化jar操作命令
Feb 24 Python
python实现简单图片物体标注工具
Mar 18 Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 Python
Tensorflow设置显存自适应,显存比例的操作
Feb 03 Python
python+opencv3生成一个自定义纯色图教程
Feb 19 Python
keras 多gpu并行运行案例
Jun 10 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
python实现数学模型(插值、拟合和微分方程)
Nov 13 Python
Python移位密码、仿射变换解密实例代码
Jun 27 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
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
php导出excel格式数据问题
2014/03/11 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
2010/07/26 Javascript
将光标定位于输入框最右侧实现代码
2012/12/04 Javascript
一个CSS+jQuery实现的放大缩小动画效果
2014/02/19 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
javascript中tostring()和valueof()的用法及两者的区别
2015/11/16 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
js轮播图无缝滚动效果
2017/06/17 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
[01:02:45]完美世界DOTA2联赛 LBZS vs Forest 第三场 11.07
2020/11/09 DOTA
python del()函数用法
2013/03/24 Python
Python统计单词出现的次数
2018/04/04 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
Python连接mysql数据库及简单增删改查操作示例代码
2020/08/03 Python
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
最新的互联网创业计划书
2014/01/10 职场文书
战友聚会邀请函
2014/01/18 职场文书
应届毕业生应聘自荐信范文
2014/02/26 职场文书
校园学雷锋活动月总结
2014/03/09 职场文书
机关保密承诺书
2014/06/03 职场文书
劳动竞赛口号
2014/06/16 职场文书
2014年行政执法工作总结
2014/12/11 职场文书
综合素质评价自我评价
2015/03/06 职场文书
本地通过nginx配置反向代理的全过程记录
2021/03/31 Servers