itertools模块(三)
itertools模块是python内置的迭代器模块,主要用于迭代器的定制。这一篇书接上文,继续对有限迭代器的相关内容进行进一步的介绍,依然是介绍其常见的一些使用方法以及应用场景。另外,由于方法众多,所以分了上下两篇予以介绍。
1.有限序列迭代器
1.1 groupby函数
groupby( iterable, key=None):
iterable:一个可迭代对象
key:一个函数,将iterable的元素作为参数
把迭代器中相邻的重复元素挑选出来放在一起,挑选规则是通过key函数完成的。只要作用于key函数的两个元素的返回值相同,那么我们就认为这两个元素时一组的。该函数有两个返回值,一个是key函数的返回值,另一个是临近的同组元素的迭代器
from itertools import groupby for key, value in groupby('AaBbA', lambda x: x.upper()): print(f"key = {key}, value={list(value)}")复制代码
result:
key = A, value=['A', 'a'] key = B, value=['B', 'b'] key = A, value=['A']复制代码
1.2 islice函数
islice(iterable, start, stop[, step]):
iterable:一个可迭代对象
start:起始索引
stop:结束索引
step:间隔
对iterable进行切片操作
from itertools import islice for i in islice([0, 1, 2, 3, 4, 5], 1, 5, 2): print(i)复制代码
result:
1 3复制代码
1.3 startmap函数
startmap(iterable[, func]):
iterable:一个可迭代对象
func: 一个函数,将iterable的元素作为参数
创建一个迭代器,迭代器中的每个值为func(*item), item来自iterable。类似于map()函数。两者区别在于func有多个参数时,startmap为func(*arg)用的是可变参数,map为func(arg1,arg2)用的是位置参数
from itertools import starmap values = [(0, 5), (1, 6), (2, 7), (3, 8), (4, 9)] for i in starmap(lambda x, y: (x, y, x * y), values): print('%d * %d = %d' % i)复制代码
result:
0 * 5 = 0 1 * 6 = 6 2 * 7 = 14 3 * 8 = 24 4 * 9 = 36复制代码
1.4 takewhile函数
takewhile(predicate, iterable):
predicate:一个判断函数,它的返回值是一个bool类型
iterable:一个可迭代对象
将iterable的元素依次代入predicate进行判断,若结果为False则去除,为True则予以保留。最后生成一个新的迭代器。其作用和dropwhile()函数相反
from itertools import takewhile for i in takewhile(lambda x: x < 3, [1, 2, 3, 4, 5]): print(i)复制代码
result:
1 2复制代码
1.5 tee函数
tee(iterable,n=2)
iterable:可迭代对象。 n:要复制的个数。
说明:对iterable进行复制,生成n的相同的iterable。
from itertools import tee for i in tee([1, 2, 3, 4, 5], 3): print(list(i))复制代码
result:
[1, 2, 3, 4, 5] [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]复制代码
1.6 zip_longest函数
与zip一样,都是将序列组合成元组,zip返回的是元组列表,izip_longest返回的是迭代器,所以效率更高。组合时,izip_longest以最长序列为准,默认补充位是None。
zip_longest(*iterables,fillvalue=None)
from itertools import zip_longest print(list(zip_longest([1,2,3,4], 'ABC', 'xy', fillvalue='0')))复制代码
result:
[(1, 'A', 'x'), (2, 'B', 'y'), (3, 'C', '0'), (4, '0', '0')]
作者:不思量自难忘
链接:https://juejin.cn/post/7021336088887164941