Python itertools模块代码范例,Python库文档的“itertools”章的“Itertools Recipes”部分包含了使用该模块函数的很多范例。这里不重复文档中的内容,而是直接引用。学习Python函数式编程,这部分文档属于必读内容。
Python标准库文档“itertool”章的“Itertools Recipes”节是很好的学习资源,见https://docs.python.org/3/library/itertools.html#itertools-recipes。
注意,这里列出的范例都不是itertools
模块中可以导入的函数,如果想在自己开发的应用中使用这些范例,需要阅读代码并理解原理,然后通过复制、修改来使用代码。
下表总结了基于itertools
模块中的基本函数实现的一些自定义函数范例。
函数名 | 参数列表 | 返回结果 |
---|---|---|
take |
(n, iterable) |
以列表形式返回作为输入参数的可迭代对象的前 n 个值。基于islice() 函数实现 |
tabulate |
(function, start=0) |
返回function(0), function(1), … 。通过map(function, count()) 实现 |
consume |
(iterator, n) |
使可迭代对象前进 n 步,如果 n 值为None ,则遍历完可迭代对象,返回空列表 |
nth |
(iterable, n, default=None) |
返回可迭代对象的第 n 个值,如果取不到该值则返回给定的默认值。基于islice() 函数实现 |
quantify |
(iterable, pred=bool) |
对可迭代对象的每个元素应用谓词函数,返回结果为“真”的元素个数。基于sum() 函数和map() 函数实现,并利用了布尔值True 转换为整数时值为1的特点 |
padnone |
(iterable) |
返回输入可迭代对象中的值,并在后面追加无限个None 值。主要用于创建类似于zip_longest() 或者map() 的函数 |
ncycles |
(iterable, n) |
返回 n 次可迭代对象中的值 |
dotproduct |
(vec1, vec2) |
数学上向量点积的定义:两个向量对应分量乘积之和 |
flatten |
(listOfLists) |
展开一层嵌套列表,将多个列表链接为一个列表 |
repeatfunc |
(func, times=None, *args) |
根据输入的参数列表args 执行times 次函数func |
pairwise |
(iterable) |
s -> (s0, s1), (s1, s2), (s2, s3) |
grouper |
(iterable, n, fillvalue=None) |
将输入数据按固定长度分组 |
roundrobin |
(*iterables) |
roundrobin('ABC', 'D', 'EF') --> A D E B F C |
partition |
(pred, iterable) |
根据谓词函数将输入可迭代对象划分为真值部分和非真值部分 |
unique_everseen |
(iterable, key=None) |
按照出现顺序列出所有元素,之前出现过的元素除外 |
unique_justseen |
(iterable, key=None) |
按照出现顺序,列出与前一个元素不同的元素。多用于为已排序的列表剔除相同元素 |
iter_except |
(func, exception, first=None) |
重复执行函数func ,直到出现异常。常用于遍历操作,直到发生KeyError 或者IndexError |