浅析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
标签:python,迭代
0
投稿

猜你喜欢

  • 在django中使用post方法时,需要增加csrftoken的例子

    2023-08-12 06:44:34
  • python中二维阵列的变换实例

    2021-06-28 07:54:06
  • Python opencv图像基本操作学习之灰度图转换

    2023-02-17 09:04:43
  • 关于CSS学习——写给初学者

    2008-07-25 19:17:00
  • JavaScript对象的创建模式与继承模式示例讲解

    2024-04-23 09:27:40
  • 解决Python中回文数和质数的问题

    2021-03-07 02:51:23
  • asp之让Session永不过期

    2011-04-15 10:42:00
  • Python数据类型转换详解

    2021-03-04 04:11:13
  • golang中sync.Map并发创建、读取问题实战记录

    2023-07-16 12:23:27
  • 如何用GAN训练自己的数据生成新的图片

    2023-04-13 16:45:07
  • Sql Server 2000 一些安全设置

    2008-02-13 18:57:00
  • JS模拟简易滚动条效果代码(附demo源码)

    2024-04-23 09:22:45
  • sql server实现分页的方法实例分析

    2024-01-26 11:36:26
  • Internet Explorer 8 Beta2 功能预览

    2008-07-29 13:20:00
  • python 爬取壁纸网站的示例

    2022-07-10 13:29:54
  • opencv python 傅里叶变换的使用

    2022-07-27 14:55:03
  • python启动应用程序和终止应用程序的方法

    2022-09-19 19:04:32
  • 提高Python生产力的五个Jupyter notebook插件

    2021-06-01 12:52:33
  • perl特殊符号及默认的内部变量

    2023-08-08 02:13:20
  • MySQL关系型数据库事务的ACID特性与实现

    2024-01-21 13:15:17
  • asp之家 网络编程 m.aspxhome.com