十个Python Itertools方法助你事半功倍( 二 )

如果不想使用operator.mul,上述程序与以下程序相同:
import itertoolsnums = [1, 2, 3, 4, 5]print(list(itertools.accumulate(nums, lambda a, b: a * b)))# [1, 2, 6, 24, 120]7. itertools.repeat(), itertools.cycle(), itertools.count():创建无限迭代器在某些情况下,开发者需要获得一个无限迭代器 。有3个函数可以帮助实现:
7.1 itertools.repeat():重复生成相同的项目例如,可以按以下方式获取三个相同的“Yang”:
import itertoolsprint(list(itertools.repeat('Yang', 3)))# ['Yang', 'Yang', 'Yang']7.2 itertools.cycle():通过循环获取无限迭代器itertools.cycle函数在中断循环之前不会停止:
import itertoolscount = 0for c in itertools.cycle('Yang'):if count >= 12:breakelse:print(c, end=',')count += 1# Y,a,n,g,Y,a,n,g,Y,a,n,g,7.3 itertools.count():生成一个无限的数字序列如果需要的只是数字,可以使用itertools.count函数:
import itertoolsfor i in itertools.count(0, 2):if i == 20:breakelse:print(i, end=" ")# 0 2 4 6 8 10 12 14 16 18如上所示,它的第一个参数是起始数字 , 第二个参数是步长 。
8. itertools.pAIrwise():轻松获取成对的元组自Python 3.10以来,itertools模块新增了一个名为pairwise的新函数 。它是一个简洁的工具,可以从可迭代对象生成连续重叠的成对元素 。
import itertoolsletters = ['a', 'b', 'c', 'd', 'e']result = itertools.pairwise(letters)print(list(result))# [('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', 'e')]9. itertools.takewhile():以不同的方式过滤元素itertools.takewhile()返回一个迭代器,只要给定的谓词函数评估为True,该迭代器就会生成可迭代对象中的元素 。
import itertoolsnums = [1, 61, 7, 9, 2077]print(list(itertools.takewhile(lambda x: x < 100, nums)))# [1, 61, 7, 9]此函数与内置的filter()函数不同 。
filter函数将遍历整个列表:
nums = [1, 61, 7, 9, 2077]print(list(filter(lambda x: x < 10, nums)))# [1, 7, 9]然而,itertools.takewhile函数会在评估函数为False时停止:
import itertoolsnums = [1, 61, 7, 9, 2077]print(list(itertools.takewhile(lambda x: x < 10, nums)))# [1]10. itertools.dropwhile():itertools.takewhile的反向操作这个函数是上一个函数的逆操作 。
itertools.takewhile()函数在True时返回可迭代对象中的元素 , 而itertools.dropwhile()函数会在True时删除可迭代对象的元素,并返回剩余的元素 。
import itertoolsnums = [1, 61, 7, 9, 2077]print(list(itertools.dropwhile(lambda x: x < 100, nums)))# [2077]



推荐阅读