Python迭代器

前言

此处主要记录关于Python字符串的一些便利操作。

使用生成器函数实现可迭代对象

在 Python 中,一边循环一边计算的机制,称为生成器(Generator);
生成器是一个返回迭代器的函数,只能用于迭代操作
(yield就是专门给生成器用的return)

生成器函数

def gen():
    print('1')
    yield '111111'
    print('2')
    yield '222222'
    print('3')
    yield '333333'
g = gen()
print(g)  # 
next(g)   # 1
next(g)   # 2
next(g)   # 3
next(g, 'over')

实现可迭代对象

使 用 类 的 _ _ i t e r _ _ 方 法 实 现 生 成 器 函 数 , 每 次 y i e l d 返 回 一 个 素 数 。 \color{red}{使用类的\_\_iter\_\_方法实现生成器函数,每次yield返回一个素数。} 使__iter__yield

class PrimeNumbers:
	def __init__(self,start,end):
		self.start = start
		self.end = end

	def isPrimeNum(self,k):
		if k < 2:
			return False
		for i in range(2,k):
			if k % i == 0:
				return False
		return True

	def __iter__(self):
		for k in range(self.start,self.end+1):
			if self.isPrimeNum(k):
				yield k

for x in PrimeNumbers(1,100):
	print(x)

主要用于一边处理数据一边显示该条结果。

进行反向迭代

reversed(l)# 列表的方向迭代器


class FloatRange:
	def __init__(self,start,end,step=0.1):
		self.start = start
		self.end = end
		self.step =step

	def __iter__(self):
		t = self.start
		while t <= self.end:
			yield t
			t += self.step

	def __reversed__(self):
		t =self.end
		while t >= self.start:
			yield t
			t -= self.step
# 正向迭代
for x in FloatRange(1.0,4.0,0.5):
	print(x)
# 反向迭代
for x in reversed(FloatRange(1.0,4.0,0.5)):
	print(x)

使 用 类 的 _ _ r e v e r s e d _ _ 方 法 实 现 生 成 器 函 数 , 每 次 y i e l d 返 回 一 个 素 数 。 \color{red}{使用类的\_\_reversed\_\_方法实现生成器函数,每次yield返回一个素数。} 使__reversed__yield

迭代器切片

不支持负数操作,到末尾第三个参数为None

from itertools import islice

l = range(20)
t = iter(l)

for x in islice(t,5,10):
	print(x)

使 用 标 准 库 中 的 i t e r t o o l s . i s l i c e , 它 能 返 回 一 个 迭 代 对 象 切 片 的 生 成 器 。 \color{red}{使用标准库中的itertools.islice,它能返回一个迭代对象切片的生成器。} 使itertools.islice

迭代多个对象

并行迭代

from random import randint

chinese = [randint(60,100) for x in range(40)]
math = [randint(60,100) for x in range(40)]
english = [randint(60,100) for x in range(40)]

total = []
for c,m,e in zip(chinese,math,english):
	total.append(c+m+e)
print(total)

使 用 内 置 函 数 z i p , 它 将 多 个 可 迭 代 对 象 合 并 , 每 次 迭 代 返 回 一 个 元 组 。 \color{red}{使用内置函数zip,它将多个可迭代对象合并,每次迭代返回一个元组。} 使zip

串行迭代

from itertools import chain

a = (1,2,3)
b = ['a','c','d']


for i in chain(a,b):
	print(i)

使 用 标 准 库 中 的 i t e r t o o l s . c h a i n , 它 将 多 个 可 迭 代 对 象 链 接 。 \color{red}{使用标准库中的itertools.chain,它将多个可迭代对象链接。} 使itertools.chain

你可能感兴趣的:(Python)