在软件开发领域中,人们经常会用到这一个概念——“设计模式”(design pattern),它是一种针对软件设计的共性问题而提出的解决方案。在一本圣经级的书籍《设计模式:可复用面向对象软件的基础》(1991年,Design Patterns - Elements of Reusable Object-Oriented Software)中,它提出了23种设计模式。迭代器模式就是其中的一种,在各种编程语言中都得到了广泛的应用。
repeat(object [,times]) :反复生成 object 至无限,或者到给定的 times 次。
import itertools co = itertools.count() cy = itertools.cycle('ABC') re = itertools.repeat('A', 30)
# 注意:请分别执行;以下写法未加终止判断,只能按 Ctrl+C 退出 for n in co: print(n,end=" ") # 0 1 2 3 4...... for n in cy: print(n,end=" ") # A B C A B C A B...... for n in re: print(n,end=" ") # A A A A A A A A....(30个)
3.2 有限迭代器
以上方法,比较常用的有:chain() 将多个可迭代对象(可以是不同类型)连接成一个大迭代器;compress() 方法根据真假过滤器筛选元素;groupby() 把迭代器中相邻的重复元素挑出来放在一起;islice() 方法返回迭代器切片;tee() 方法根据可迭代对象创建 n 个(默认2个)迭代器副本。
for c in itertools.chain('ABC', [1,2,3]): print(c,end=" ") # 输出结果:A B C 1 2 3
for c in itertools.compress('ABCDEF', [1, 1, 0, 1, 0, 1]): print(c,end=" ") # 输出结果:A B D F
forkey, groupin itertools.groupby('aaabbbaaccd'):
print(key, ':', list(group)) # 输出结果: a : ['a', 'a', 'a'] b : ['b', 'b', 'b'] a : ['a', 'a'] c : ['c', 'c'] d : ['d']
itertools.tee('abc', 3) # 输出结果:(, at 0x1fc73f91d08>, at 0x1fc73efc248>)
3.3 组合迭代器
product() :求解多个可迭代对象的笛卡尔积。
permutations() :求解可迭代对象的元素的排列。
combinations():求解可迭代对象的元素的组合。
for i in itertools.product('ABC', [1
,2]): print(i, end=" ") # 输出结果:('A', 1) ('A', 2) ('B', 1) ('B', 2) ('C', 1) ('C', 2)
for i in itertools.permutations('ABC', 2): print(i, end=" ") # 输出结果:('A', 'B') ('A', 'C') ('B', 'A') ('B', 'C') ('C', 'A') ('C', 'B')
for i in itertools.combinations('ABC', 2): print(i, end
=" ") # 输出结果:('A', 'B') ('A', 'C') ('B', 'C')
for i in itertools.combinations('ABCD', 3): print(i, end=" ") # 输出结果:('A', 'B', 'C') ('A', 'B', 'D') ('A', 'C', 'D') ('B', 'C', 'D')