举例讲解如何在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 相关文章推荐
跟老齐学Python之传说中的函数编写条规
Oct 11 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
Python实现二维数组输出为图片
Apr 03 Python
python字典嵌套字典的情况下找到某个key的value详解
Jul 10 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
Aug 04 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
Aug 14 Python
Python从文件中读取数据的方法步骤
Nov 18 Python
python 简单的调用有道翻译
Nov 25 Python
python 基于selectors库实现文件上传与下载
Dec 31 Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 Python
baselines示例程序train_cartpole.py的ImportError
May 20 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
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
详谈PHP文件目录基础操作
2014/11/11 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
php实现websocket实时消息推送
2018/03/30 PHP
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
js实现的点击div区域外隐藏div区域
2014/06/30 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
2018/12/20 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
Python json模块使用实例
2015/04/11 Python
python图像处理之镜像实现方法
2015/05/30 Python
python删除文本中行数标签的方法
2018/05/31 Python
深入浅析Python的类
2018/06/22 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
pandas DataFrame 交集并集补集的实现
2019/06/24 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
音乐表演专业毕业生求职信
2013/10/14 职场文书
生产部厂长助理职位说明书
2014/03/03 职场文书
4s店活动策划方案
2014/08/25 职场文书
2014年仓管员工作总结
2014/11/18 职场文书
给客户的检讨书
2014/12/21 职场文书
对领导班子的意见和建议
2015/06/08 职场文书