Python 的包 itertools 提供了众多的返回迭代器的函数. 这些迭代器函数能够帮助编写快速并且节省内存空间的函数.
无限迭代器函数
无限迭代器函数顾名思义就是可以无限循环产生迭代的函数, 所以一定不要尝试使用 list 等函数来去迭代化, 否则会让计算机内存迅速用尽.
count(start [, step])
: 按照 step (默认是 1) 从 start 开始叠加.
for x in count(1, 2):
print(x)
if x > 10:
break
# 1
# 3
# 5
# 7
# 9
cycle(a_list_like)
: 在一个像 list 的变量中循环取元素.
i = 0
for y in itertools.cycle('ABCD'):
print(y)
i += 1
if i > 5:
break
# A
# B
# C
# D
# A
# B
repeat(elem [, n])
: 重复返回 elem, 如果 n 有值, 则重复 n 次.
list(itertools.repeat('Sparrow', 4))
# ['Sparrow', 'Sparrow', 'Sparrow', 'Sparrow']
有限迭代器函数
有限迭代器函数和无限迭代器函数的差别在于, 其输出的迭代的数量是有一定的限度的.
accumulate(p [,func])
: 类似于 functools 里面的 reduce 函数, 将一个函数在 list 上做累积计算.
list(accumulate([1, 2, 3, 4], lambda x, y: x + y))
# [1, 3, 6, 10]
chain(p, q [,...])
: 把两个变量的元素连起来生成迭代器.chain.from_iterable(iterable)
: 类似于chain()
函数, 不过其接受的参数为一个, 是简化的chain
形式.
list(chain('ABC', 'DEF'))
# ['A', 'B', 'C', 'D', 'E', 'F']
list(chain.from_iterable(['ABC', 'DEF']))
# ['A', 'B', 'C', 'D', 'E', 'F']