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

简介:

本节书摘来自异步社区《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 = start
        self.end = end
    def __iter__(self):
        'Returns itself as an iterator object'
        return self
    def next(self) :
        'Returns the next value till current is lower than end'
        if self.current > self.end:
            raise StopIteration
        else:
            self.current += 1
            return 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

相关文章
|
3月前
|
机器学习/深度学习 数据可视化 数据处理
从基础到进阶:探索Python在数据科学中的应用
【10月更文挑战第18天】从基础到进阶:探索Python在数据科学中的应用
55 1
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
Python 数据分析:从零开始构建你的数据科学项目
【10月更文挑战第9天】Python 数据分析:从零开始构建你的数据科学项目
70 2
|
4月前
|
机器学习/深度学习 数据可视化 数据挖掘
探索Python的奥秘:数据科学中的利器
本文将深入探讨Python编程语言在数据科学领域的强大应用。通过简洁易懂的语言,我们将解析Python的核心概念、流行库以及在实际项目中的应用,帮助您理解为何Python成为数据科学家的首选工具。
68 0
|
2月前
|
大数据 数据处理 开发者
Python中的迭代器和生成器:不仅仅是语法糖####
本文探讨了Python中迭代器和生成器的深层价值,它们不仅简化代码、提升性能,还促进了函数式编程风格。通过具体示例,揭示了这些工具在处理大数据、惰性求值及资源管理等方面的优势。 ####
|
2月前
|
数据采集 数据可视化 数据处理
Python数据科学:Pandas库入门与实践
Python数据科学:Pandas库入门与实践
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
Python在数据科学中的应用:从入门到实践
本文旨在为读者提供一个Python在数据科学领域应用的全面概览。我们将从Python的基础语法开始,逐步深入到数据处理、分析和可视化的高级技术。文章不仅涵盖了Python中常用的数据科学库,如NumPy、Pandas和Matplotlib,还探讨了机器学习库Scikit-learn的使用。通过实际案例分析,本文将展示如何利用Python进行数据清洗、特征工程、模型训练和结果评估。此外,我们还将探讨Python在大数据处理中的应用,以及如何通过集成学习和深度学习技术来提升数据分析的准确性和效率。
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
2月前
|
机器学习/深度学习 数据可视化 数据处理
Python数据科学:从基础到实战
Python数据科学:从基础到实战
42 1
|
2月前
|
机器学习/深度学习 数据可视化 数据处理
Python在数据科学中的应用###
本文探讨了Python语言在数据科学领域的广泛应用及其重要性。通过分析Python的简洁语法、强大的库支持和跨平台特性,阐述了为何Python成为数据科学家的首选工具。文章还介绍了Python在数据处理、分析和可视化方面的具体应用实例,展示了其在提升工作效率和推动科学研究方面的巨大潜力。最后,讨论了未来Python在数据科学领域的发展趋势和挑战。 ###
|
2月前
|
机器学习/深度学习 分布式计算 数据可视化
Python在数据科学中的应用与挑战
本文探讨了Python编程语言在数据科学领域的广泛应用及其面临的主要挑战。Python因其简洁的语法、强大的库支持和活跃的社区,已成为数据科学家的首选工具。然而,随着数据量的激增和复杂性的增加,Python也面临着性能瓶颈、内存管理等问题。本文将通过具体案例分析,展示Python在数据处理、分析和可视化方面的优势,同时讨论如何克服其在大规模数据处理中的局限性,为读者提供实用的解决方案和优化建议。