-
1.字符串重复
输入
name="abcd",n=7
,则函数的输出为:cyclicName(name, n) = "abcdabc"
示例代码如下:
from itertools import cycle def cyclicName(name, n): gen = cycle(name) res = [next(gen) for _ in range(n)] return ''.join(res)
-
2.dropwhile 的使用
itertools.dropwhile(predicate, iterable)
当迭代器中的元素使
predicate
函数为True
时,丢弃迭代器中的元素。否则,返回该元素及该元素后的所有元素。例如:from itertools import dropwhile a=list(dropwhile(lambda x: x < 5, [1, 3, 6, 2, 1])) print a
输出为:
[6,2,1]
-
3.实现浮点数的
range
函数给定起点终点和步长,生成一组数。例如,
start=-0.5,stop=0.5,step=0.1
则其输出应该是,[-0.5,-0.4,-0.3,-0.2,-0.1,0.0,0.1,0.2,0.3,0.4]
.
示例代码:from itertools import count, takewhile def floatRange(start, stop, step): gen = takewhile(lambda x: x<stop, count(start,step)) return list(gen)
主要是无限迭代器
count
和takewhile
函数的使用。[3][3]
-
4.组合生成器之
permutations
给一个英文人名列表,两两组合并按字典顺序。例如,
players = ["trainee", "warrior", "ninja"]
则输出为:rockPaperScissors(players) = [["ninja", "trainee"], ["ninja", "warrior"], ["trainee", "ninja"], ["trainee", "warrior"], ["warrior", "ninja"], ["warrior", "trainee"]]
示例代码如下:
from itertools import permutations def rockPaperScissors(players): return sorted(map(lambda x:list(x),list(permutations(players,2))))
permutations
用于求序列的排列。 -
5.拆分可迭代对象
迭代器 | 参数 | 结果 | 备注 |
---|---|---|---|
chain() | p,q,… | p0, p1, …,p_last,q0,q1… | 迭代多个单层容器 |
chain.from_iterable() | iterable | p0, p1, … plast, q0, q1, … | chain.from_iterable([‘ABC’, ‘DEF’]) --> A B C D E F,迭代两层 |
import itertools
chars = itertools.chain("abc", "def")
print([x for x in chars])
# ['a', 'b', 'c', 'd', 'e', 'f']
chars = itertools.chain.from_iterable([["abc"], ["def"]])
print([x for x in chars])
# ['abc', 'def']
- 6.累加
chars = itertools.accumulate([1,2,3])
print([x for x in chars])
接受可选参数,func,accumulate(list[,func)
import operator
chars = itertools.accumulate([1,3,3], operator.mul)
print([x for x in chars])
- Refer
1 http://wiki.jikexueyuan.com/project/explore-python/Standard-Modules/itertools.
2 https://docs.python.org/3.9/library/itertools.html#itertools.accumulate
[3] http://funhacks.net/2017/02/13/itertools/