`

Python入门 迭代

阅读更多

在Python中,如果给定一个listtuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)。

在Python中,迭代是通过 for ... in 来完成的

Python的for循环抽象程度要高于Java的for循环。

因为 Python 的 for循环不仅可以用在list或tuple上,还可以作用在其他任何可迭代对象上。

 

因此,迭代操作就是对于一个集合,无论该集合是有序还是无序,我们用 for 循环总是可以依次取出集合的每一个元素。

注意: 集合是指包含一组元素的数据结构,我们已经介绍的包括:
1. 有序集合:list,tuple,str和unicode;
2. 无序集合:set
3. 无序集合并且具有 key-value 对:dict

而迭代是一个动词,它指的是一种操作,在Python中,就是 for 循环。

迭代与按下标访问数组最大的不同是,后者是一种具体的迭代实现方式,而前者只关心迭代结果,根本不关心迭代内部是如何实现的。

 

索引迭代:

Python中,迭代永远是取出元素本身,而非元素的索引。

对于有序集合,元素确实是有索引的

enumerate() 函数:可以取得索引:

>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> for index, name in enumerate(L):
...     print index, '-', name
... 
0 - Adam
1 - Lisa
2 - Bart
3 - Paul

 

使用 enumerate() 函数,我们可以在for循环中同时绑定索引index和元素name。但是,这不是 enumerate() 的特殊语法。实际上,enumerate() 函数把:

['Adam', 'Lisa', 'Bart', 'Paul']

变成了类似:

[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]

因此,迭代的每一个元素实际上是一个tuple:

for t in enumerate(L):
    index = t[0]
    name = t[1]
    print index, '-', name

如果我们知道每个tuple元素都包含两个元素,for循环又可以进一步简写为:

for index, name in enumerate(L):
    print index, '-', name

这样不但代码更简单,而且还少了两条赋值语句。

可见,索引迭代也不是真的按索引访问,而是由 enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。

 

zip()函数可以把两个 list 变成一个 list:

>>> zip([10, 20, 30], ['A', 'B', 'C'])
[(10, 'A'), (20, 'B'), (30, 'C')]

 

迭代dict的value:

dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value:

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
print d.values()
# [85, 95, 59]
for v in d.values():    print v
# 85
# 95
# 59

如果仔细阅读Python的文档,还可以发现,dict除了values()方法外,还有一个 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一样:

 

d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
print d.itervalues()
# <dictionary-valueiterator object at 0x106adbb50>
for v in d.itervalues():
    print v
# 85
# 95
# 59

 

那这两个方法有何不同之处呢?

1. values() 方法实际上把一个 dict 转换成了包含 value 的list。

2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。

3. 打印 itervalues() 发现它返回一个 <dictionary-valueiterator> 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。

如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作它不对迭代对象内部的数据有任何要求。

 

迭代dict的key和value:

首先,我们看看 dict 对象的 items() 方法返回的值:

>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> print d.items()
[('Lisa', 85), ('Adam', 95), ('Bart', 59)]

可以看到,items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value:

>>> for key, value in d.items():
...     print key, ':', value
... 
Lisa : 85
Adam : 95
Bart : 59

和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。

 

分享到:
评论

相关推荐

    python入门详细知识点

    最近在自学python,就顺便整理了一份xmind,其中大类包括python基础,函数,高级特性,函数式编程,模块,面向对象编程(OOP),面向对象高级编程,错误、调试、测试,IO编程,进程和线程总10个大类。基础里面又包括...

    Python基础教程 (第3版).pdf

    ●久负盛名的Python入门经典 ●中文版累计销量200000+册 ●针对Python 3全新升级 本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基本概念,包括列表、元组、字符串、字典...

    python从入门到精通地址.txt

    零基础入门学习Python P1. 000愉快的开始 P2. 001我和Python的第一次亲密接触 P3. 002用Python设计第一个游戏 P4. 003小插曲之变量和字符串 P5. 004改进我们的小游戏 P6. 005闲聊之Python的数据类型 P7. 006...

    Python基础入门教程.zip

    课程简介: 第一课 入门基础 Python简介 为什么选择Python ...迭代器 第4课 面向对象基础 第5课 文件访问与函数式编程入门 第6课 高级面向对象 第7课 并发编程以及系统常用模块 第8课 常用第三方模块

    Python编程入门经典

    9.4 为循环生成迭代器 133 9.5 使用字典的特殊字符串 替换 135 9.6 重要模块 137 9.6.1 getopt——从命令行中得到 选项 137 9.6.2 使用一个以上的进程 139 9.6.3 线程——在相同的进程中 完成多个工作 141 9.7 本章...

    PYTHON从入门到精通.doc

    迭代 列表生成式 生成器 函数式编程 高阶函数 匿名函数 装饰器 偏函数 模块 使用模块 安装第三方模块 使用__future__ 面向对象编程 类和实例 访问限制 继承和多态 获取对象信息 面向对象高级编程 使用__slots__ 使用...

    爬虫python语句-条件语句与循环语句python爬虫python入门python教程.pdf

    爬⾍python语句-条件语句与循环语句python爬⾍python⼊门 python教程 ⼀、if语句 举例 if x ("Negative changed to zero") elif x==0: print("Zero") elif x == 1: print("Single") else: print("More") #if elif ...

    Python语言入门经典必背一百个程序

    内容概要:收集了Python语言入门经典必背一百个程序。这些程序从最基础的数据类型、关键字、到程序语法和结构、等等,由浅入深,全面覆盖,同时兼顾了趣味性。 适合人群:适合中小学生和初学python语言者。 能学到...

    Python开发入门——迭代的基本使用

    本文主要介绍Python中迭代的基本知识和使用 什么是迭代 在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)。 在Python中,迭代是通过 for … in...

    Python编程零基础入门

    Python编程零基础入门 (都是html格式文件,用浏览器打开就行) 1-1Python介绍和安装 10-1正则表达式与python 10-2特殊的符号 10-3re模块 11-1Time模块的使用 11-2Log模块的使用 2-1Python变量赋值及数据类型 2-2...

    Python3完全零基础入门精讲超清教程.txt

    课程目标:绝对零基础Python3.x 入门,掌握Python语言常数据类型与操作、语句语法、流程控制、函数定义、模块管理,类与面向对象编程,错误与异常处理,文件读写等知识;为以后Python各方向领域编程打下坚实基础。...

    Python基础教程(第3版) 高清PDF

    然后循序渐进地介绍了一些相对高级的主题,包括抽象、异常、魔法方法、属性、迭代器;此后探讨了如何将Python与数据库、网络、C语言等工具结合使用,从而发挥出Python的强大功能,同时介绍了Python程序测试、打包、...

    python入门到高级全栈工程师培训 第3期 附课件代码

    python入门到高级全栈工程师培训视频学习资料;本资料仅用于学习,请查看后24小时之内删除。 【课程内容】 第1章 01 计算机发展史 02 计算机系统 03 小结 04 数据的概念 05 进制转换 06 原码补码反码 07 物理层和...

    Python入门知识经典总结.docx

    常见的Python最佳实践: 循环与条件控制: 在for循环中使用else子句,当循环正常结束(非break跳出)时执行代码块。 列表操作: 使用列表推导式(List Comprehensions)简化创建和处理列表的操作。 通过enumerate...

    python从入门到精通全60集

    python从入门到精通,全60集 资料中附有百度网盘下载链接 部门内容如下: 1、python环境安装 2、Python编程语言基础技术框架 3、python数据类型介绍 4、条件测试及if语句,while、for循环 5、迭代器和列表解析 6、...

    Python教程大全入门到实战

    Python 迭代器 list 生成式(列表生成式) 生成器 迭代器和生成器综合例子 面向对象 面向对象的概念 类的定义和调用 类方法 修改和增加类属性 类和对象 初始化函数 类的继承 类的多态 类的访问控制 模块与包 Python ...

    python源码 零基础入门学习Python+课件源码资料.zip

    python源码 零基础入门学习Python+课件源码资料: 002用Python设计第一个游戏(课件+源代码) 004改进我们的小游戏(课件+源代码) 005闲聊之Python的数据类型(课件+源代码) 007了不起的分支和循环(课件) 008...

    Python基础教程(第3版)中文版pdf(清晰版,带目录)

    本书是经典的Python入门教程,层次鲜明、结构严谨、内容翔实,特别是后面几章,作者将前面讲述的内容应用到10个引人入胜的项目中,并以模板的形式介绍了项目的开发过程,手把手教授Python编程实践,让读者从项目中...

Global site tag (gtag.js) - Google Analytics