← 返回首页
Python3基础教程(六十一)
发表时间:2022-04-25 22:58:08
itertools

Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数。

1.count

count(start=0, step=1),创建一个能生成均匀分布序列(或者说等差数列)的迭代器,start指定起点,step指定步长。start, step不限于浮点数。注意,count()生成的是无限序列迭代器,所以用于循环中时,需要另外的条件来控制循环的终止。

import itertools
import time

natuals = itertools.count(start=0,step=2)
for n in natuals:
    time.sleep(1)
    print(n)

运行结果:

0
2
4
6
8
10
...

2.cycle

创建一个迭代器,从一个iterable中循环取出元素并输出。以下例子会输出比如:ABCDEABCDE

import itertools
import itertools as it
import time

k = 0
for item in it.cycle('ABCDE'):
    print('k={0}, item={1}'.format(k, item))
    k += 1
    if k == 10:
        break

运行结果:

k=0, item=A
k=1, item=B
k=2, item=C
k=3, item=D
k=4, item=E
k=5, item=A
k=6, item=B
k=7, item=C
k=8, item=D
k=9, item=E

3.repeat

创建迭代器,重复输出object。如果未指定times会无限输出,如果指定了times则重复输出指定次数。

import itertools
import itertools as it
import time

for item in it.repeat('Hello,Python!',5):
    print('{0}'.format(item))

运行结果:

Hello,Python!
Hello,Python!
Hello,Python!
Hello,Python!
Hello,Python!

4.chain 创建一个迭代器,接收多个iterables参数,将它们串接起来,然后进行遍历。

import itertools as it
import time

for item in it.chain('ABCD','EFG','HIJ'):
    print(item)

运行结果:

A
B
C
D
E
F
G
H
I
J

5.groupby

把迭代器中相邻的重复元素挑出来放在一起。

import itertools as it
import time

for key, group in it.groupby('AAABBBCCAAA'):
    print(key, list(group))

运行结果:

A ['A', 'A', 'A']
B ['B', 'B', 'B']
C ['C', 'C']
A ['A', 'A', 'A']

6.compress 根据selectors所列的各元素对原数据进行滤波处理,挑选出对应的selectors元素为True的data元素。selectors与data的元素是一一对应的。

import itertools as it
import time

#如果两者的元素个数不同时,则依据较短(元素个数较少)者进行遍历
print(list(it.compress('BCDEFG', [0,0,1,0,0,1,1]))) # ['D', 'G']

运行结果:

['D', 'G']