面向对象的编程语言中提供了方便的容器,例如Map、List、Queue等,并且每类容器都是可迭代的,Python也不例外。Python的容器主要有列表、元组、字典和集合,它们也是可迭代的。意味着你可以调用迭代器函数iter()来遍历各种容器。在迭代器遍历容器的过程中,通常是使用next()函数来遍历迭代器,使用for循环来不断的从可迭代对象中实例化迭代器。本文主要介绍7个最有用的Python迭代器。

count

count()与range()类似,但是count()没有界限。count() 函数需要一个起始值和一个可选的步长,输出无穷大的值。count()特别适合遍历输出一个值直到满足特定条件。以map容器为例,输出n*n<1000的所有值:




map迭代器java map迭代器类型_map迭代器java


cycle

顾名思义,cycle()函数是循环遍历的迭代器。示例中是遍历List,为List中每个数值添加标签,标签的范围由range()给出:


map迭代器java map迭代器类型_迭代_02


chain

chain()迭代器可以将多个可迭代的对象连接在一起,以2个List连接为例:


map迭代器java map迭代器类型_List_03


starmap

starmap()将一个函数和一个可迭代的容器作为参数:

itertools.starmap(function,  iterable)

starmap与map非常相似,不同之处在于,starmap允许输入函数接受已经分组在可迭代容器中的多个参数,示例如下:


map迭代器java map迭代器类型_迭代器_04


product

product()迭代器在参数中产生可迭代项的笛卡尔积,等效于使用多个嵌套循环,一般用来为所有项组合计算某些值。可选的repeat参数允许计算其自身的迭代笛卡尔积,例如:


map迭代器java map迭代器类型_map迭代器遍历_05


islice

islice()用于从迭代器返回特定的切片。与一般的slice()函数非常相似。但是,slice()是对列表、元组的浅拷贝。与slice()相比,islice(iterable,start,stop,[step])除了iterable之外,语法几乎与slice()完全相同,islice返回iterable,因此速度更快,因为元素是动态生成的。如果考虑程序的内存和效率,推荐使用islice()。需要注意的是islice()不能使用负索引。、


map迭代器java map迭代器类型_迭代_06


accumulate

accumulate()可以迭代地将特定的二进制函数应用于列表元素,并将聚合后的新值放在新的列表中。


map迭代器java map迭代器类型_迭代器_07


总结

Python并不是一种函数式语言,但借用了许多的函数概念。通过将这些迭代器与容器相结合,极大的丰富了语言功能,简化了代码编写,给用户提供了一个快速高效的编写环境。