举例讲解如何在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、Javascript中的闭包比较
Feb 04 Python
详解Python中 __get__和__getattr__和__getattribute__的区别
Jun 16 Python
对Tensorflow中权值和feature map的可视化详解
Jun 14 Python
python pandas 对时间序列文件处理的实例
Jun 22 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
Aug 02 Python
Django中的forms组件实例详解
Nov 08 Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 Python
python之当你发现QTimer不能用时的解决方法
Jun 21 Python
关于Python 的简单栅格图像边界提取方法
Jul 05 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
Aug 09 Python
Python迭代器iterator生成器generator使用解析
Oct 24 Python
Python使用正则实现计算字符串算式
Dec 29 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实现文件下载断点续传详解
2014/10/15 PHP
php把大写命名转换成下划线分割命名
2015/04/27 PHP
PHP 中常量的知识整理
2017/04/14 PHP
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
js控制input框只读实现示例
2014/01/20 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
js实现手机web图片左右滑动效果
2017/12/29 Javascript
JS交互点击WKWebView中的图片实现预览效果
2018/01/05 Javascript
JS中Object对象的原型概念基础
2018/01/29 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
python encode和decode的妙用
2009/09/02 Python
python统计cpu利用率的方法
2015/06/02 Python
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
Python入门之后再看点什么好?
2018/03/05 Python
python实现寻找最长回文子序列的方法
2018/06/02 Python
使用Html5中的cavas画一面国旗
2019/09/25 HTML / CSS
amaze ui 的使用详细教程
2020/08/19 HTML / CSS
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
安全演讲稿大全
2014/05/09 职场文书
2015年信贷员工作总结
2015/04/28 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
数据库连接池
2021/04/06 MySQL
企业版Windows 11有哪些新功能? Win11适用于企业的功能介绍
2021/11/21 数码科技