浅析python中的迭代与迭代对象


Posted in Python onOctober 08, 2018

什么是python的迭代

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

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

Python的for循环抽象程度要高于C的for循环,因为Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。

(可以直接作用于for循环的对象统称为可迭代对象(Iterable),如list、tuple、dict、set、str等。)

list这种数据类型虽然有下标,但很多其他数据类型是没有下标的,但是,只要是python的可迭代对象,无论有无下标,都可以迭代,比如dict就可以迭代:

>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> for key in d:...   print(key)
...
a
c
b

因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。

默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。

由于字符串也是可迭代对象,因此,也可以作用于for循环:

>>> for ch in 'ABC':
...   print(ch)
...ABC

所以,当我们使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是list还是其他数据类型。

那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False

最后一个小问题,如果要对list实现类似Java那样的下标循环怎么办?Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

>>> for i, value in enumerate(['A', 'B', 'C']):
...   print(i, value)
...
0 A
1 B
2 C

上面的for循环里,同时引用了两个变量,在Python里是很常见的,比如下面的代码:

>>> for x, y in [(1, 1), (2, 4), (3, 9)]:
...   print(x, y)
...
1 1
2 4
3 9

以上就是本篇文章所讲述的所有内容,这篇文章主要介绍了相关于python中迭代和迭代对象的知识,希望你能借助资料从而理解上述所说的内容。希望我在这片文章所讲述的内容能够对你有所帮助,让你学习python更加轻松,感谢大家对三水点靠木的支持。

Python 相关文章推荐
python2.7删除文件夹和删除文件代码实例
Dec 18 Python
Python设计模式之代理模式实例
Apr 26 Python
django模型中的字段和model名显示为中文小技巧分享
Nov 18 Python
python在线编译器的简单原理及简单实现代码
Feb 02 Python
Python(Django)项目与Apache的管理交互的方法
May 16 Python
python实现QQ空间自动点赞功能
Apr 09 Python
python如何实现视频转代码视频
Jun 17 Python
Python 离线工作环境搭建的方法步骤
Jul 29 Python
简单了解django文件下载方式
Feb 10 Python
用python介绍4种常用的单链表翻转的方法小结
Feb 24 Python
Python Scrapy图片爬取原理及代码实例
Jun 12 Python
PyQt5的相对布局管理的实现
Aug 07 Python
实例讲解python中的序列化知识点
Oct 08 #Python
实例讲解python中的协程
Oct 08 #Python
详解python分布式进程
Oct 08 #Python
python中多个装饰器的执行顺序详解
Oct 08 #Python
使用EduBlock轻松学习Python编程
Oct 08 #Python
Django forms组件的使用教程
Oct 08 #Python
详解关于Django中ORM数据库迁移的配置
Oct 08 #Python
You might like
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
php实现快速排序法函数代码
2012/08/27 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
php开发工具有哪五款
2015/11/09 PHP
PDO::_construct讲解
2019/01/27 PHP
PHP析构函数destruct与垃圾回收机制的讲解
2019/03/22 PHP
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
基于jQuery实现滚动刷新效果
2017/01/09 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
Vue cli+mui 区域滚动的实例代码
2018/01/25 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
2019/07/15 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
解决Django Static内容不能加载显示的问题
2019/07/28 Python
Python实现对adb命令封装
2020/03/06 Python
Java Unsafe类实现原理及测试代码
2020/09/15 Python
HTML5 新事件 小结
2009/07/16 HTML / CSS
canvas离屏技术与放大镜实现代码示例
2018/08/31 HTML / CSS
SteelSeries赛睿官网:游戏外设和配件的领先制造商(耳机、键盘、鼠标和鼠标垫)
2018/06/17 全球购物
澳大利亚在线批发商:Simply Wholesale
2021/02/24 全球购物
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
瀑布模型都有哪些优缺点
2014/06/23 面试题
读书月活动方案
2014/05/22 职场文书
2014年质量工作总结
2014/11/22 职场文书
幼儿园学前班幼儿评语
2014/12/29 职场文书
大学生违纪检讨书范文
2015/05/07 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
女人创业励志语录,句句蕴含能量,激发你的潜能
2019/08/20 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL
Python Django项目和应用的创建详解
2021/11/27 Python
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS