阅读 86

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


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐