python中itertools的使用方法,工作学习必备!

本文介绍了Python itertools模块如何通过count(), cycle(), repeat(), product(), permutations(), combinations()等函数实现无穷迭代、排列组合,提升代码可读性和效率。详细探讨了这些函数的用法及其在实际项目中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

在代码中写出好几个for循环语句有时候会使代码可读性变差,也让缩进变得很不整齐,好在python中有一个模块itertools能解决关于迭代的一些问题,从而简化我们的工作,本文简单介绍一下常用的itertools函数。

注意本文内容主要来自python官方文档,链接:https://docs.python.org/zh-cn/3/library/itertools.html,本文为个人学习记录,大家有更多的疑问也可以再去文档中多多探索。


以下的内容由于篇幅限制,没有举出很多例子,读者可以自行尝试使用,也可以加深印象。

无穷的迭代器

也就是会无限迭代的迭代器,直到手动跳出这个循环。

函数(使用方式为itertools.函数名) []表示可以不传入,有默认值效果
count(start, [step])从start开始计数,step为每次计数增加的数值(默认为1),会无限迭代下去
cycle(“string”)将string的内容反复进行无限循环,此处输出为s t r i n g s t r i n g s …
repeat(“string”, [n])将string重复无限次,若有n输入,那么重复n次即可

排列组合迭代器

函数(使用方式为itertools.函数名) []中的内容表示可以不传入,有默认值,l表示可迭代的对象效果
product(l1,l2)笛卡尔积,相当于嵌套的for循环,如product([1,2,3],[‘a’, ‘b’, ‘c’])结果为(1, ‘a’) (1, ‘b’) (1, ‘c’) (2, ‘a’) (2, ‘b’) (2, ‘c’) (3, ‘a’) (3, ‘b’) (3, ‘c’)
combinations(l, r)返回的是元素无顺序的组合结果,r为结果对象中每个值的长度(默认为l全长),如combinations(‘ABC’, 2)–> (‘A’, ‘B’), (‘A’, ‘C’), (‘B’, ‘C’)
permutations(l, [r])返回元素有顺序的排列组合结果,r为结果对象中每个值的长度(默认为l全长),如permutations(“AB”, 2)–>(‘A’, ‘B’), (‘B’, ‘A’) ,另外 permutations(“ABC”, 2)–>(‘A’, ‘B’), (‘A’, ‘C’), (‘B’, ‘A’), (‘B’, ‘C’), (‘C’, ‘A’), (‘C’, ‘B’)
combinations_with_replacement(l, r)和上面的方法不同的地方在于此处l中的元素只能向后去组合,如combinations_with_replacement(‘ABC’, 2)–>(‘A’, ‘A’) (‘A’, ‘B’) (‘A’, ‘C’) (‘B’, ‘B’) (‘B’, ‘C’) (‘C’, ‘C’)

其它重要的迭代器

函数(使用方式为itertools.函数名) []中的内容表示可以不传入,有默认值,l表示可迭代的对象效果
accumulate(l, [func])累加的函数,可以将l对象中的所有数累加一次。例如accumulate([1, 2, 3, 4])的结果为1 3 6 10 (即1, 1+2, 1+2+3, 1+2+3+4)。此外还可以传入func改变累计产生的变化(不再是累加,而是传入的函数的功能)
chain(“str1”, “str2”)将传入的每个str都遍历一次,此处的结果为s t r 1 s t r 2
chain.from_iterable(l)同上,但是是从一个可迭代的变量(如列表,元组等)中迭代
compress(l1, l2)输入两个列表,后面列表中的值决定之前列表中的值是否要保留(通过0,1的方式,0表示不保存)
dropwhile(judge, l)有简单的判断,经过判断后,保留可迭代对象中从第一个不满足条件的值和之后所有的值,如dropwhile(lambda x: x<5, [2,3,6,1, 3]) --> 6 1 3
takewhile(judge, l)与dropwhile相反,保留在第一个不满足条件的值和之前所有的值,如dropwhile(lambda x: x<5, [2,3,6,1, 3]) --> 2 3 6
filterfalse(judge, l)选出可迭代对象中所有满足filter条件的值(即过滤掉错误值),如 filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8
groupby(l, key)通过key对对象进行分组,例如[{“name”:“xiaohei”, “age”:“3”}, {“name”:“xiaobai”, “age”:“5”}, {“name”:“xiaohuang”, “age”:“5”}, {“name”:“xiaolv”, “age”:“3”}]这样的列表可以通过age关键字来进行分组
islice(l, start, stop, step)制作切片
starmap(func, l)对l对象中的每个值都执行func函数
tee(l)复制多个迭代器
zip_longest(l1,l2)将两个对象的值进行一一对应的组合(不论是字符串或是可迭代对象都行),如zip_longest([1,4,6,4,1], [1, 4, 2], fillvalue=0) -->(1, 1) (4, 4) (6, 2) (4, 0) (1, 0)

参考:https://docs.python.org/zh-cn/3/library/itertools.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值