Python的Itetool是一个模块,它提供了各种函数,这些函数在迭代器上工作以产生复杂的迭代器。该模块作为一个快速,内存效率的工具,可以单独使用或组合使用以形成迭代器代数。
例如,假设有两个列表,并且您想要将它们的元素相乘。有几种方法可以实现这一目标。可以使用朴素的方法,即同时迭代列表的元素并将它们相乘。另一种方法是使用 map 函数,即通过将 mul 运算符作为第一个参数传递给 map 函数,并将 List 作为该函数的第二个和第三个参数传递。让我们看看每种方法所花费的时间。
# 演示迭代器模块的Python程序 import operator import time # 定义列表 L1 = [1, 2, 3] L2 = [2, 3, 4] # 映射函数之前的开始时间 t1 = time.time() # 计算结果 a, b, c = map(operator.mul, L1, L2) # 映射函数后的结束时间 t2 = time.time() # 映射函数花费的时间 print("Result:", a, b, c) print("Time taken by map function: %.6f" %(t2 - t1)) # 初始方法之前的开始时间 t1 = time.time() # 使用for循环计算结果 print("Result:", end = " ") for i in range(3): print(L1[i] * L2[i], end = " ") # 朴素方法后的结束时间 t2 = time.time() print("\nTime taken by for loop: %.6f" %(t2 - t1))
输出:
Result: 2 6 12 Time taken by map function: 0.000005 Result: 2 6 12 Time taken by for loop: 0.000014
在上面的示例中,可以看出 map 函数所花费的时间大约是 for 循环所用时间的一半。这表明迭代工具是快速、内存高效的工具。
此模块提供的不同类型的迭代器包括:
- 无限迭代器
- 组合迭代器
- 终止迭代器
无限迭代器
Python 中的迭代器是可以与“for in 循环”一起使用的任何 Python 类型。Python 列表、元组、字典和集合都是内置迭代器的示例。但是迭代器对象不必穷尽,有时它可以是无限的。这种类型的迭代器称为无限迭代器。
Python 提供了三种类型的无限迭代器:
- 计数(开始,步骤): 此迭代器从“开始”数字开始打印并无限打印。如果提到步骤,则跳过数字,否则默认情况下步骤为1。请参阅下面的示例,了解它与 for in 循环的用法。
例:
# 演示无限迭代器的Python程序 import itertools # for 循环 for i in itertools.count(5, 5): if i == 35: break else: print(i, end =" ")
输出:
5 10 15 20 25 30
- 循环(可迭代): 此迭代器按传递的容器中的顺序打印所有值。当所有元素都以循环方式打印时,它将再次从头开始重新开始打印。
示例 1:
# 演示无限迭代器的Python程序 import itertools count = 0 # for 循环 for i in itertools.cycle('AB'): if count > 7: break else: print(i, end = " ") count += 1
输出:
css
A B A B A B A B
示例 2: 使用下一个函数。
# 演示无限迭代器的Python程序 import itertools l = ['Geeks', 'for', 'Geeks'] # 定义迭代器 iterators = itertools.cycle(l) # for 循环 for i in range(6): # Using next function print(next(iterators), end = " ")
组合迭代器
输出:
rust
Geeks for Geeks Geeks for Geeks
- 重复(值、数): 此迭代器重复打印传递的值无限次。如果提到可选关键字 num,则它会重复打印 num 次数。
例:
# 演示 repeat() 工作的Python代码 # 为迭代器操作导入“itertools” import itertools # 使用 repeat() 重复打印数字 print ("Printing the numbers repeatedly : ") print (list(itertools.repeat(25, 4)))
输出:
Printing the numbers repeatedly : [25, 25, 25, 25]