(内部模块)itertools

# Python内建的模块itertools提供了非常有用的用于操作迭代对象的函数
# count()会创建一个无限的迭代器
import itertools
# natuals = itertools.count(1)
# for n in natuals:
#     print(n)

# cycle()会把传入的字符串一直重复的迭代循环下去
# cs = itertools.cycle('ABC')
# for c in cs:
#     print(c)

# repeat()负责把一个元素无限重复下去.不过如果提供第二个参数就可以限定重复的次数.
ns = itertools.repeat('ABC', 3)
for n in ns:
    print(n)

# 我们通常用takewhile()等函数根据条件判断来截取一个有限的序列
natuals = itertools.count(1)
ns = itertools.takewhile(lambda x: x <= 10, natuals)
print(list(ns))

# itertools提供了更好用的操作迭代对象的函数
# chain()函数, 将迭代对象串联起来么形成更大的迭代器
for c in itertools.chain('ABC', 'XYZ'):
    print(c)

# groupby()把迭代器中相邻的重复元素跳出来放在一起.
# for key, group in itertools.groupby('AAABBBCCAAA'):
#     print(key, list(group))

# 实际上挑选规则是通过函数完成的, 只要作用于函数的两个元素返回的值
# 相等, 这两个元素就被认为是在一组的.而函数返回值作为组的key.
# 如果我们要忽略大小写分组.可以让'A', 'a'返回相同的key
for key, group in itertools.groupby('AaaBBbcCAAa', lambda c:c.upper()):
    print(key, list(group))

# itertools模块提供的全部是处理迭代功能的函数.他们的返回值不是list
# 而是Iterable.只有用for循环迭代的是否才真正的计算.
    原文作者:sixleaves
    原文地址: https://www.jianshu.com/p/100ee7cadca7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞