查看原文
其他

Python迭代、可迭代对象与迭代器

爬虫俱乐部 Stata and Python数据分析 2023-10-24

本文作者:胡艺粼,中南财经政法大学金融学院

本文编辑:周一鸣

技术总编:王玉婷

Stata and Python 数据分析

爬虫俱乐部Stata基础课程Stata进阶课程Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~
  01 迭 代

迭代,是访问集合元素的一种方式。在Python中,迭代是通过for循环实现的。比如给定字符串"Python",每次从中取出一个字符,那么就会依次得到 "P"、"y"、"t"、"h"、"o"、"n",这种通过for循环依次取出集合中的每一个元素,实现遍历每个元素的过程,就被称为迭代。简单的迭代程序实现如下:

for i in "Python": print(i)

结果如下:

 02 可迭代对象

可迭代对象不是具体的数据类型,而是指存储了元素的容器对象,且对象定义了iter方法或者getitem方法。常见的可迭代对象包括:列表list、元组tuple、字典dict、集合set、字符串str等,另外生成器generator也是可迭代对象。

a=[1,2,3] #a为列表for i in a: print(i)b=("你","我","他") #b为元组for j in b: print(j)

结果如下:

整数int不是可迭代对象。为了满足迭代需求,可以使用range()函数,该函数常常与for...in...命令同时出现,其作用是生成一个数字序列,从而运用for循环实现每个数字的遍历。

举例如下:

c=int(5.2)for i in c: print(i)

通过int()函数生成的整数在进行for循环时出现报错,原因就是整数int不是可迭代对象。下面的例子中使用range()函数,程序就能够成功执行。

for i in range(1,5): print(i)

结果如下:

判断一个对象是否可迭代可以使用isinstance(),若返回值为True,则表明该对象可迭代。具体用法如下:

from collections.abc import Iterable #导入collections模块中的Iterableisinstance(a,Iterable) isinstance(b,Iterable)isinstance(c,Iterable)

结果如下:

  03 迭代器
迭代器是一个表示数据流的对象,可通过重复调用next方法或内置函数next()来获取元素,当没有元素时,抛出StopIteration异常。创建迭代器的步骤如下:
首先,创建一个迭代器类型。迭代器类型的定义为:当类中定义了iternext两种方法,其中,iter需要返回对象本身,即self;next返回下一个数据,当没有数据时,需要抛出StopIteration异常。
创建迭代器类型的程序如下:
class C: #创建一个类 def __init__(self): #定义初始值self.value = 0 self.value = 0 def __iter__(self): #定义__iter__方法,返回值为self本身 return self
def __next__(self): #定义__next__方法,self.value的值每次增加1,返回值为增加1后的数值,直到值为3时抛出异常 self.value += 1 if self.value == 3: raise StopIteration() return self.value

然后,根据类实例化创建迭代器对象。迭代器对象支持对其进行for循环:在执行for循环时,第一步先调用iter方法获取迭代器对象,第二步是不断执行next,直到出现异常StopIteration,终止循环。

object = C() #类实例化创建迭代器对象for i in object: print(i)

结果如下:

 04 区别与联系

第一,可迭代对象与迭代器的区别在于是否定义了next方法。可迭代对象只定义了iter方法,没有定义next方法,而迭代器定义了next方法。通过dir()函数,我们可以直观地看出两者的区别。

dir(a) #a是列表[1,2,3],为可迭代对象

dir(object) #object是迭代器

由此也可以看出,迭代器对象一定是可迭代对象,但可迭代对象不一定是迭代器对象。
第二,可迭代对象可以通过调用 iter() 转换成迭代器。
d=iter(a)dir(d)

以上就是对Python中迭代、可迭代对象与迭代器的详细介绍,大家在阅读过文章之后也要多加练习,更好地掌握这部分内容!

END

重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:

最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。




对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!







往期推文推荐考研之后,文科生需以“do”躬“do”!焕新升级!轻松获取港股、权证的历史交易数据爬虫俱乐部的精彩答疑---cntraveltime【爬虫俱乐部新命令速递】在Stata中与ChatGPT对话

用`fs`命令批量获取文件夹和不同文件夹下的excel文件

自然语言处理之实例应用

JSON帮手,FeHelper

最新、最热门的命令这里都有!

Python实现微信自动回复告诉python,我想“狂飙”了——线程池与异步协程为爬虫提速高级函数——map()和reduce()

Stata绘制条形图的进阶用法

快来看看武汉的房价是不是又双叒叕涨了!Python 常见内置函数(二)

Stata绘制饼形图的进阶用法

Python标准库--logging模块盲区探索——Stata的读写极限Camelot提取PDF表格:一页多表、多页一表
     关于我们 

   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存