前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python|认识可迭代对象与迭代器

Python|认识可迭代对象与迭代器

作者头像
算法与编程之美
发布2020-07-16 12:54:14
7450
发布2020-07-16 12:54:14
举报

问题描述

可迭代对象指的是定义了_ _ iter _ _ 方法的对象,调用该方法会返回一个迭代器对象。可迭代对象,例如:list列表、tuple元组、带有上述iter方法的对象等等。

迭代器就是定义_ _ next _ _ 方法的对象。每次调用上述方法就返回迭代器一个值,没有就抛出StopIteration异常。

解决方案

如果给定一个list或tuple,我们可以用for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。在Python中,迭代是用for…in来完成的,而很多语言比如C语言,迭代list是通过下标完成的

一类是集合数据类型,如list、tuple、dict、set、str等;一类是generator,包括生成器和带yield的generator function。这些可以直接作用于for循环的对象统称为可迭代对象:Iterable

创建方法

1 可迭代对象

Python的for循环抽象程度要高于C的for循环,因为Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。list这种数据类型虽然有下标,但很多其他数据类型是没有下标的,但是,只要是可迭代对象,无论有无下标,都可以迭代,比如dict就可以迭代:

d={‘a’:1,’b’:2,’c’:3}for key in d:print(key)acb

因为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

判断一个对象是否是可迭代对象可以通过collections模块的Iterable类型判断

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

2 迭代器

迭代器可以由可迭代对象通过内置函数iter()函数实现,该函数会接受一个可迭代对象,返回一个迭代器对象。实际上,iter()函数内部调用可迭代对象的——iter——方法。而前面在可迭代对象中就提到,该方法会返回一个迭代器对象

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

可以使用isinstance()判断一个对象是否是Iterator对象:

from collections import Iteratorprint( isinstance((x for x in range(10)), Iterator))Trueprint(isinstance([], Iterator))Falseprint(isinstance({}, Iterator))Falseprint(isinstance('abc', Iterator))False

结语

凡是可作用于for循环的对象都是Iterable类型;凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。Python的for循环本质上就是通过不断调用next()函数实现的。

END

主 编 | 王文星

责 编 | 李 靖

where2go 团队

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档