📜  Python中的迭代器函数1

📅  最后修改于: 2020-01-17 14:22:40             🧑  作者: Mango

建议先阅读:Python中的迭代器
Python在其定义中还允许一些有趣且有用的迭代器函数,以实现高效的循环并加快代码的执行速度。“ itertools ” 模块中有许多内置的迭代器。
该模块实现了许多迭代器构建块。
一些有用的迭代器:
1. accumulate(iter,func):此迭代器带有两个参数,可迭代的target以及target中每次值迭代时将遵循的函数。如果没有函数传递,若输入迭代是空的发生,输出迭代也将是空的。
2. chain(iter1,iter2 ..):此函数用于将可迭代目标中的所有一个接一个地打印出来。

# Python代码,展示如何使用accumulate() and chain()
# 导入"itertools"
import itertools
# 导入"operator"
import operator
# 初始化列表list 1
li1 = [1, 4, 5, 7]
# 初始化list 2
li2 = [1, 6, 5, 9]
# 初始化list 3
li3 = [8, 10, 5, 4]
# 使用accumulate()
print ("每次迭代后的和 : ",end="")
print (list(itertools.accumulate(li1)))
# 使用accumulate()
print ("每次迭代后的和 : ",end="")
print (list(itertools.accumulate(li1,operator.mul)))
# 使用chain()
print ("每次迭代后的串联结果 : ",end="")
print (list(itertools.chain(li1,li2,li3)))

输出:

每次迭代后的和 : [1, 5, 10, 17]
每次迭代后的和 : [1, 4, 20, 140]
每次迭代后的串联结果 : [1, 4, 5, 7, 1, 6, 5, 9, 8, 10, 5, 4]

3. chain.from_iterable():该函数的实现方式与chain()类似,但此处的参数是列列表或任何其他可迭代容器
4. compress(iter,选择器):此迭代器根据作为其他参数传递的布尔列表值,有选择地从传递的容器中打印打印与布尔值true相对应的参数否则将全部跳过。

# Python代码,展示如何使用chain.from_iterable()和compress()
# 导入"itertools"
import itertools
# 初始化list 1
li1 = [1, 4, 5, 7]
# 初始化list 2
li2 = [1, 6, 5, 9]
# 初始化list 3
li3 = [8, 10, 5, 4]
# 初始化list4
li4 = [li1, li2, li3]
# 使用chain.from_iterable()
print ("所有的数值 : ",end="")
print (list(itertools.chain.from_iterable(li4)))
# 使用compress()选择性打印
print ("选择性打印结果 : ",end="")
print (list(itertools.compress('芒果文档',[1,0,0,1,])))

输出:

所有的数值 : [1, 4, 5, 7, 1, 6, 5, 9, 8, 10, 5, 4]
选择性打印结果 : ['芒', '档']

5. dropwhile(func,seq):此迭代器仅在func之后才开始打印字符
6. filterfalse(func,seq):顾名思义,此迭代器仅打印为传递的函数返回false的值

# Python 代码展示dropwhile()和filterfalse()如何工作
# 导入"itertools"
import itertools
# 初始化list
li = [2, 4, 5, 7, 8]
# 使用dropwhile()
print ("返回false条件的值 : ",end="")
print (list(itertools.dropwhile(lambda x : x%2==0,li)))
# 使用filterfalse()
print ("在方程中返回false的数值 : ",end="")
print (list(itertools.filterfalse(lambda x : x%2==0,li)))

输出:

返回false条件的值 : [5, 7, 8]
在方程中返回false的数值 : [5, 7]