Python 迭代器和生成器

Posted 1328497946ts

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 迭代器和生成器相关的知识,希望对你有一定的参考价值。

迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。迭代是Python强大的功能之一,是访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象,在遍历字符串,列表或元组对象时非常有用。

一、迭代器

1、什么是可迭代对象

如果给定一个list或tuple,可以通过for循环来遍历这个list或tuple,这种遍历称为迭代(Iteration),被遍历的list或tuple被称为可迭代对象。除了list或tuple外,还有很多可以被迭代的对象,如str、set、tuple等。

>>> x = [100, 200, 300]
>>> y = iter(x)
>>> z = iter(x)
>>> next(y)
>>> next(y)
>>> next(z)
>>> next(z)
>>> type(x)
>>> type(y)

运行结果如下所示

技术图片

这里x是一个可迭代对象,可迭代对象并不是指某种具体的数据类型,list是可迭代对象,dict是可迭代对象,set也是可迭代对象。y和x是两个独立的迭代器,迭代器内部有一个状态,改状态用于记录当前迭代所在的位置,以便下次迭代式获取正确的元素。

在python中,迭代使用过for...in来完成的。例如:

for a in bb:
    print(a, end="")

 

2、什么是迭代器

迭代器是一个可以记住遍历位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器有两个基本的方法:iter()和next()。其中,iter()方法用于创建迭代器对象:next()用于遍历对象的元素。在遍历字符串,列表或元组对象时经常会用到迭代器。例如:

>>> lis = ["苹果", "香蕉", "橘子", "桃子"]
>>> aa = iter(lis)
>>> next(aa)
>>> next(aa)
>>> next(aa)
>>> next(aa)
>>> next(aa)    #超出遍历的范围时会报错

运行结果如下图所示

技术图片

迭代器智能向前遍历元素,不能后退。

迭代器对象可以使用常规的for语句或while语句进行遍历。例如:

>>> lis = ["香蕉", "橘子", "苹果", "桃子"]
>>> bb= iter(lis)
>>> for a in bb:
        print(a, end="")
>>>香蕉 橘子 苹果 桃子

 3、自定义迭代器

通过定义一个实现迭代器协议方法的类,即可自定义一个迭代器。

class MyIterator:
	def __init__(self, x=3, xmax=300):
		self.__mul,self.__x = x, x
		self.__xmax = xmax

	def __iter__(self):
		return self

	def __next__(self):
		if self.__x and self.__x != 1:
			self.__mul *= self.__x
			if self.__mul <= self.__xmax:
				return self.__mul
			else:
				raise StopIteration
		else:
			raise StopIteration

if __name__ == ‘__main__‘:
	myiter = MyIterator()
	for i in myiter:
		print("迭代的数据元素为:",i)

技术图片

 

以上是关于Python 迭代器和生成器的主要内容,如果未能解决你的问题,请参考以下文章

python的迭代器和生成器

python中迭代器和生成器。

python函数:迭代器和生成器

python函数:迭代器和生成器

python基础13-迭代器和生成器

Python之迭代器和生成器