浅析python中的迭代与迭代对象
作者:laozhang 时间:2023-11-19 09:21:35
什么是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
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
在django中使用post方法时,需要增加csrftoken的例子
python中二维阵列的变换实例
Python opencv图像基本操作学习之灰度图转换
![](https://img.aspxhome.com/file/2023/1/96951_0s.jpg)
关于CSS学习——写给初学者
JavaScript对象的创建模式与继承模式示例讲解
解决Python中回文数和质数的问题
![](https://img.aspxhome.com/file/2023/9/87869_0s.jpg)
asp之让Session永不过期
Python数据类型转换详解
golang中sync.Map并发创建、读取问题实战记录
如何用GAN训练自己的数据生成新的图片
![](https://img.aspxhome.com/file/2023/8/68398_0s.jpg)
Sql Server 2000 一些安全设置
JS模拟简易滚动条效果代码(附demo源码)
![](https://img.aspxhome.com/file/2023/6/135586_0s.png)
sql server实现分页的方法实例分析
Internet Explorer 8 Beta2 功能预览
![](https://img.aspxhome.com/file/UploadPic/20087/29/2008729132347173s.jpg)
python 爬取壁纸网站的示例
![](https://img.aspxhome.com/file/2023/8/87978_0s.png)
opencv python 傅里叶变换的使用
![](https://img.aspxhome.com/file/2023/2/92472_0s.jpg)
python启动应用程序和终止应用程序的方法
提高Python生产力的五个Jupyter notebook插件
![](https://img.aspxhome.com/file/2023/4/92164_0s.png)