《Python数据科学指南》——1.8 使用迭代器

news/2024/7/7 22:37:07

本节书摘来自异步社区《Python数据科学指南》一书中的第1章,第1.8节,作者[印度] Gopi Subramanian ,方延风 刘丹 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.8 使用迭代器

毫无疑问,对于数据科学的程序而言,数据是极其重要的输入。数据的大小是可变的,有些能装载到内存中,有些则不能。而记录访问架构也是随一种数据格式到另一种而变化。有趣的是,不同的算法处理数据时,需要的是可变长度的组块。例如,假如你在写一个随机梯度下降的算法,你希望在每个时间片传送5000条记录的数据块,如果你对如何访问数据、理解数据格式、依次传送数据、给调用者需要的数据等流程有着清晰的概念,那你才能成功。这样能让你写出清晰的代码。大多数时候,最有趣的部分是我们如何处理数据,而不是我们怎么访问这些数据。Python给我们提供了迭代器这种优雅的方式来处理所有这些需求。

1.8.1 准备工作

Python中的迭代器实现了一种迭代器模式,它让我们可以一个接一个地处理一个序列,但不需要真正实现整个序列。

1.8.2 操作方法

我们来创建一个简单的迭代器,叫作“简单计数器”,用一些代码演示了怎样高效地使用迭代器。

# 1.写一个简单的迭代器
class SimpleCounter(object):def __init__(self, start, end):self.current = startself.end = enddef __iter__(self):'Returns itself as an iterator object'return selfdef next(self) :'Returns the next value till current is lower than end'if self.current > self.end:raise StopIterationelse:self.current += 1return self.current - 1            
# 2.现在来访问这个迭代器
c = SimpleCounter(1,3)    
print c.next()
print c.next()
print c.next()
print c.next()# 3.另外一种访问方式
for entry in iter(c):print entry

1.8.3 工作原理

在第1步中,我们定义了一个名为Simple Counter的类,构造函数_init_有两个参数:起始和结束,来定义序列的开始和结束。请注意_iter_和next这两个方法,在Python中想要成为一个迭代器的对象必须都支持这两个函数。_iter_返回整个类对象作为一个迭代器对象,next方法返回迭代器里的下一个值。

如第2步所示,我们可以使用next()函数访问迭代器中的连续元素。Python也提供了一个方便的函数iter(),它能用来在循环体中循序访问元素,如第3步所示。它在内部实现中使用了next函数。

请注意,一个迭代器对象只能被使用一次。运行上面的代码之后,如果我们仍要像下面这样访问迭代器。

print next(c)

系统会抛出一个StopIteration异常。在序列已经到尾部的时候再调用c.next() 会触发一个StopIteration异常。

    raise StopIteration
StopIteration
>>>

iter()函数会处理这个异常,当数据访问完成的时候退出循环。

1.8.4 更多内容

再看另一个迭代器的示例,我们需要在程序中访问一个非常大的文件,不过,在代码里,我们每次只访问一行,直到读完整个文件。

f = open(some_file_of_interest)
for l in iter(f):
print l
f.close()

在Python里,一个文件对象就是一个迭代器,它支持iter()和next()函数。因此,我们每次只处理一行数据,而不是将全部文件加载到内存中。

迭代器给了你自由,你可以让你的应用程序自己定义访问你的数据源的方式。

下面的链接提供了Python中多种多样的迭代器使用方法的信息,如无限迭代器itertools中的count()、cycle()以及repeat()等。

https://docs.python.org/2/library/itertools.html#itertools.cycle。


http://lihuaxi.xjx100.cn/news/242254.html

相关文章

计算机考试批处理试题,2015计算机三级考试pc技术模拟试题及答案(八)

2015计算机三级考试pc技术模拟试题及答案(八)1.关于Windows 98中的网上邻居的相关叙,( )是错误的。A.通过网上邻居可以游览和使用网上的全部计算机资源B.通过网上邻居可以浏览网上的打印机C.通过网上邻居不可以浏览网上的打印机D.网上邻居位于桌面上参考答案&#…

软件测试的4W1H(第1-2课时)

1.Why(软件测试为什么会出现) • 通过测试可以发现软件缺陷,进而清除软件缺陷; • 软件中存在缺陷带来的损失是巨 大的——测试的必要性和重 要性。 测试是所有工程学科的基本组成单元,是软件开发的重要组成部分。 • 测试人员水平…

Queues 队列

1. Definiation What is a queue? A queue is a list. With a queue, inseration is done at one end (known as rear) whereas deletion is performed at the other end (known as front). 2. Operations 指针对列 无法自定义队长 // array queue #include<iostream> u…

精通Python网络爬虫:核心技术、框架与项目实战.1.1 初识网络爬虫

摘要 网络爬虫也叫做网络机器人&#xff0c;可以代替人们自动地在互联网中进行数据信息的采集与整理。在大数据时代&#xff0c;信息的采集是一项重要的工作&#xff0c;如果单纯靠人力进行信息采集&#xff0c;不仅低效繁琐&#xff0c;搜集的成本也会提高。此时&#xff0c;我…

C#代码实现对Windows凭据的管理

今天有个任务&#xff0c;那就是使用C#代码实现对windows凭据管理的操作。例如&#xff1a;向windows凭据管理中添加凭据、删除凭据以及查询凭据等功能。于是乎&#xff0c;就开始在网上查找。经过漫长的查询路&#xff0c;终于在一片英文博客中找到了相关代码。经过实验&#…

内科学与计算机专业的相关性,急性心肌梗死患者QT间期变异性及心率变异性与室性心律失常的相关性分析-内科学专业论文.docx...

苏州大学学位论文使用授权声明本人完全了解苏州大学关于收集、保存和使用学位论文的规定&#xff0c;苏州大学学位论文使用授权声明本人完全了解苏州大学关于收集、保存和使用学位论文的规定&#xff0c; 即&#xff1a;学位论文著作权归属苏州大学。本学位论文电子文档的内容和…

顶级数据库管理系统的性能比较研究(论文翻译)

本文译自 《A Comparative Study on the Performance of the Top DBMS Systems 》Youssef Bassil LACSC – Lebanese Association for Computational Sciences Registered under No. 957, 2011, Beirut, Lebanon 摘要 数据库管理系统是当今将数据组织成可以搜索和更新的集合地…

女生参加软件测试培训合适吗

女生参加软件测试培训合适吗?这个问题困扰着很多女性朋友&#xff0c;大部分女性觉得软件测试属于IT技术行业&#xff0c;学起来是比较麻烦的&#xff0c;不知道是否适合女性&#xff0c;我们来看看下面的详细介绍。 女生参加软件测试培训合适吗?当然合适&#xff0c;如果说要…