Python常用内置模块——itertools

itertools是Python自带的一个非常实用的模块,甚至是百度翻译都对其用途“熟稔于心”。
Python常用内置模块——itertools_第1张图片

itertools 模块包含了一系列用来产生不同类型迭代器的函数或类,这些函数的返回都是一个迭代器,我们可以通过 for 循环来遍历取值,也可以使用 next() 来取值。

这里也顺便提一下next()函数:
作为Python内置函数,
next() 返回迭代器的下一个项目;
next() 函数要和生成迭代器的 iter() 函数一起使用。

mylist = iter(["apple", "banana", "cherry"])
x = next(mylist)
print(x)
x = next(mylist)
print(x)
x = next(mylist)
print(x)

运行结果:

apple
banana
cherry
mylist = iter(["apple", "banana", "cherry"])
x = next(mylist, "orange")
print(x)
x = next(mylist, "orange")
print(x)
x = next(mylist, "orange")
print(x)
x = next(mylist, "orange")
print(x)

运行结果:

apple
banana
cherry
orange

itertools 模块提供的迭代器函数有以下几种类型:

无限迭代器:生成一个无限序列,比如自然数序列 1, 2, 3, 4, …;

有限迭代器:接收一个或多个序列(sequence)作为参数,进行组合、分组和过滤等;

组合生成器:序列的排列、组合,求序列的笛卡儿积等;

itertools中的函数:

部分功能示例:

无限迭代器

count
count() 接收两个参数,第一个参数为起始值,默认为 0,第二个参数为步长,默认为 1。

#encoding:utf-8
import itertools

nums = itertools.count(2,2)
for i in nums:
  if i == 10:
    break
  else:
    print(i)

运行结果:

2
4
6
8

repeat
repeat() 用于反复生成一个 object:

for item in itertools.repeat('hello world', 3):
    print(item)

for item in itertools.repeat([1, 2, 3, 4], 3):
    print(item)

运行结果:

hello world
hello world
hello world
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]

cycle

cycle_strings = itertools.cycle('ABC')
i = 1
for string in cycle_strings:
    if i == 10:
       break
    else:
       print(i, string)
       i += 1

运行结果:

1 A
2 B
3 C
4 A
5 B
6 C
7 A
8 B
9 C

有限迭代器

compress
compress 可用于对数据进行筛选,当 selectors 的某个元素为 true 时,则保留 data 对应位置的元素,否则去除:

print(list(itertools.compress('ABCDEF', [1, 1, 0, 1, 0, 1])))

print(list(itertools.compress('ABCDEF', [1, 1, 0, 1])))

print(list(itertools.compress('ABCDEF', [True, False, True])))

运行结果:

['A', 'B', 'D', 'F']
['A', 'B', 'D']
['A', 'C']

dropwhile
dropwhile包含两个参数,
形式如dropwhile(predicate, iterable)
其中,predicate 是函数,iterable 是可迭代对象。对于 iterable 中的元素,如果 predicate(item) 为 true,则丢弃该元素,否则返回该项及所有后续项。

print(list(itertools.dropwhile(lambda x: x < 5, [1, 3, 6, 2, 1])))

运行结果:

[6, 2, 1]

islice
islice 是切片选择,它的使用形式为:islice(iterable, [start,] stop [, step])

print(list(itertools.islice([10, 6, 2, 8, 1, 3, 9], 5)))

print(list(itertools.islice([10, 6, 2, 8, 1, 3, 9], 2,5,1)))

运行结果:

[10, 6, 2, 8, 1]
[2, 8, 1]

组合生成器

permutations
生成全排列

print(list(itertools.permutations('ABC')))

print(list(itertools.permutations('ABC', 2)))

运行结果:

[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

combinations
产生组合

print(list(itertools.combinations('ABC', 2)))

print(list(itertools.combinations_with_replacement('ABC', 2)))

运行结果:

[('A', 'B'), ('A', 'C'), ('B', 'C')]
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

相关博文参考:

babay神——python 高效的 itertools 模块

你可能感兴趣的:(蓝桥杯,Python)