举例讲解如何在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中xrange和range的区别
May 13 Python
Python基于scrapy采集数据时使用代理服务器的方法
Apr 16 Python
python通过加号运算符操作列表的方法
Jul 28 Python
Python实现矩阵加法和乘法的方法分析
Dec 19 Python
pandas数据预处理之dataframe的groupby操作方法
Apr 13 Python
分析python请求数据
Aug 19 Python
Python脚本按照当前日期创建多级目录
Mar 01 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
通过实例学习Python Excel操作
Jan 06 Python
解决更改AUTH_USER_MODEL后出现的问题
May 14 Python
python分布式爬虫中消息队列知识点详解
Nov 26 Python
pytorch 一行代码查看网络参数总量的实现
May 12 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
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
将一维或多维的数组连接成一个字符串的php代码
2010/08/08 PHP
php addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
PHP的简单跳转提示的实现详解
2019/03/14 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
Angular6封装http请求的步骤详解
2018/08/13 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
2020/08/22 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
Python实现从URL地址提取文件名的方法
2015/05/15 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
如何写贫困证明申请书
2014/10/29 职场文书
医院营销工作计划
2015/01/16 职场文书
建议书范文
2015/02/05 职场文书
团队拓展训练感想
2015/08/07 职场文书
廉洁自律心得体会2016
2016/01/13 职场文书
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python