举例讲解如何在Python编程中进行迭代和遍历
作者:乐晨 发布时间:2023-07-12 04:42:30
迭代
首先理解下什么是迭代,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
猜你喜欢
- 简单的Tensorflow验证码识别应用,供大家参考,具体内容如下1.Tensorflow的安装方式简单,在此就不赘述了.2.训练集训练集以
- 在使用出colab进行模型训练时,发现colab的python版本更新为了3.7.11,而我的代码要在python3.6下才行配置好环境,于
- 本文介绍了保护MySQL数据库中重要数据受外部攻击的六个注意事项,以减少面临的风险。与自动的数据库备份不同,对系统管理员来说,保护数据免受未
- SQL Server 2005相对于SQL Server 2000做了很大的改进,许些新特性是非常实用的。本文中将通过几个具体示例进行详细的
- Updates(2019.8.14 19:53)吃饭前用这个方法实战了一下,吃完回来一看好像不太行:跑完一组参数之后,到跑下一组参数时好像没
- 本文实例讲述了PHP截取指定图片大小的方法。分享给大家供大家参考。具体分析如下:imagecopyresampled($newim, $im
- 译者 | 豌豆花下猫声明 :本文获得原作者授权翻译,转载请保留原文出处,请勿用于商业或非法用途。有许许多多文章写了 Python 中的许多很
- 一、动机最近打算折腾vn.py,但只有py27版本的,因为一向习惯使用最新稳定版的,所以不得不装py27的环境,不得不说 Python的全局
- Qt Designer的介绍在PyQt中编写UI界面可以直接通过代码来实现,也可以通过Qt Designer来完成。Qt Designer的
- 本篇内容通过GitHub仓库创建过程以及创建连接后的上传与下载,详细介绍了Git版本控制器使用情况,来看下。首先介绍一下什么是Git:git
- 本文实例讲述了Python实现FTP上传文件或文件夹实例。分享给大家供大家参考。具体如下:import sys import os impo
- 本文实例讲述了CI操作cookie的方法。分享给大家供大家参考,具体如下:CI 操作cookie 有三种方法,2中Ci自带的,其
- G2 是蚂蚁金服开源一个基于图形语法,面向数据分析的统计图表引擎。G2Plot 是在 G2 基础上,屏蔽复杂概念的前提下,保留 G2 强大图
- 本文实例讲述了Python获取任意xml节点值的方法。分享给大家供大家参考。具体实现方法如下:# -*- coding: utf-8 -*-
- Python正则表达式中的'r'最近遇到一个非常困惑的地方,那就是在使用Python中的正则表达式的时候,正则表达式前面的&
- 我将示范微优化(micro optimization)如何提升python代码5%的执行速度。5%!同时也会触怒任何维护你代码的人。但实际上
- 内容摘要:本文介绍了使用CSS结合javascript来实现对超链接的类型进行标注,让浏览者明确是zip,doc,pdf或其它格式的文件。这
- 最近因工作需要,要学习PHP的基础编程,于是学习架设PHP工作环境。但按照教材上介绍的那样,安装了WMAP后,一直无法运行成功。后发现Apa
- 【一、项目背景】 在素材网想找到合适图片需要一页一页往下翻,现在学会python就可以用程序把所有图片保存
- 首先下载源tar包可利用linux自带下载工具wget下载,如下所示:wget http://www.python.org/ftp/pyth