python itertools_python itertools 用法

1、介绍

itertools 是python的迭代器模块,itertools提供的工具相当高效且节省内存。

使用这些工具,你将能够创建自己定制的迭代器用于高效率的循环。

- 无限迭代器

itertools包自带了三个可以无限迭代的迭代器。这意味着,当你使用他们时,你要知道要的到底是最终会停止的迭代器,还是需要无限地迭代鞋去。

(1)count(初值=0, 步长=1):count 迭代器会返回从传入的起始参数开始的均匀间隔的数值。count 也可以接收指定的步长参数。我们来看一个简单的例子:

1 from itertools importcount2 for i incount():3 printi4 if i > 10:5 break

6

7 #从0开始循环

8 09 1

10 2

11 3

12 4

13 5

14 6

15 7

16 8

17 9

18 10

19 11

(2)islice(count(10), 5):从 10 开始,输出 5 个元素后结束。islice 的第二个参数控制何时停止迭代。但其含义并不是”达到数字 5 时停止“,而是”当迭代了 5 次之后停止“。

1 from itertools importcount,islice2 for i in islice(count(10),5):3 printi4

5 #从10开始循环迭代5次后退出循环

6 10

7 11

8 12

9 13

10 14

(3)cycle:这里我们创建了一个 for 循环,使其在三个字母 XYZ 间无限循环。当然,我们并不真地想要永远循环下去,所以我们添加了一个简单的计数器来跳出循环。

1 from itertools importcycle2 count =03 for item in cycle('XYZ'):4 if count > 7:5 break

6 printitem7 count = count + 1

8

9 #在xyz之间无限循环

10 X11 Y12 Z13 X14 Y15 Z16 X

(4)accumulate(可迭代对象[, 函数])(适用于python3)

accumulate 迭代器将返回累计求和结果,或者传入两个参数的话,由传入的函数累积计算的结果。默认设定为相加

这里,我们 导入了 accumulate,然后传入 10 个数字,0-9。迭代器将传入数字依次累加,所以第一个是 0 ,第二个是 0+1, 第三个是 1+2,如此下去。

现在我们导入 operator 模块,然后添加进去:

1 >>> from itertools importaccumulate2 >>> list(accumulate(range(10)))3 [0, 1, 3, 6, 10, 15, 21, 28, 36, 45]

这里我们传入了数字 1-4 到 accumulate 迭代器中。我们还传入了一个函数:operator.mul,这个函数将接收的参数相乘。

所以每一次迭代,迭代器将以乘法代替除法(1×1=1, 1×2=2, 2×3=6, 以此类推)

1 from itertools importaccumulate2 importoperator3 >>> list(accumulate(range(1, 6), operator.mul))4 [1, 2, 6, 24, 120]

(5)chain(*可迭代对象)

chain 可以把一组迭代对象串联起来,形成一个更大的迭代器:

1 from itertools importchain2 for c in chain(['a','b','cd'],['ef',123],'XYZ'):3 printc4

5 #输出

6 a7 b8 cd9 ef10 123

11 X12 Y13 Z14

15 #备注类似于多个list叠加

16 mm = ['a','b','cd'] + ['ef',123] + ['X','Y','Z']

(6)groupby把迭代器中相邻的重复元素挑出来放在一起.

1 from itertools importgroupby2

3 for key, group in groupby('AAABBBCCAAA'):4 printkey,list(group)5

6 #输出

7 A ['A', 'A', 'A']8 B ['B', 'B', 'B']9 C ['C', 'C']10 A ['A', 'A', 'A']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值