本文摘自php中文网,作者coldplay.xixi,侵删。
Python视频教程栏目介绍itertools模块。

在Python中有一个功能强大的迭代工具包itertools,是Python自带的标准工具包之一。
product
由于itertools是内置库,不需要任何安装,直接import itertools
即可。
product 用于求多个可迭代对象的笛卡尔积(Cartesian Product)
,它跟嵌套的 for 循环等价.即:
笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y
。
product(A, B)
和 ``((x,y) for x in A for y in B)`一样.
1 2 3 4 5 6 7 8 9 10 11 12 | import itertools
for item in itertools.product([1,2,3],[100,200]):
print (item)
# 输出如下
(1, 100)
(1, 200)
(2, 100)
(2, 200)
(3, 100)
(3, 200)复制代码
|
permutations
通俗地讲,permutations就是返回可迭代对象的所有数学或者字符的全排列方式。
全排列,即产生指定数目的元素的所有排列(顺序有关),也就是高中排列组合中的那个A
。
permutations它接受一个集合对象,然后产生一个元组序列。
比如print(list(itertools.permutations('abc',3)))
,共有A33=6种情况。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | items = [ 'a' , 'b' , 'c' ]
from itertools import permutations
for i in permutations(items):
print (i) #排列组合
print (list(itertools.permutations( 'abc' ,3)))
# 输出如下
( 'a' , 'b' , 'c' )
( 'a' , 'c' , 'b' )
( 'b' , 'a' , 'c' )
( 'b' , 'c' , 'a' )
( 'c' , 'a' , 'b' )
( 'c' , 'b' , 'a' )
[( 'a' , 'b' , 'c' ), ( 'a' , 'c' , 'b' ), ( 'b' , 'a' , 'c' ), ( 'b' , 'c' , 'a' ), ( 'c' , 'a' , 'b' ), ( 'c' , 'b' , 'a' )]复制代码
|
如果需要指定长度的所有排列,可以传递一个可选的长度参数r
。
1 2 3 4 5 6 7 8 9 10 11 12 | items = [ 'a' , 'b' , 'c' ]
from itertools import permutations
for i in permutations(items,2):
print (i) #排列组合
# 输出如下
( 'a' , 'b' )
( 'a' , 'c' )
( 'b' , 'a' )
( 'b' , 'c' )
( 'c' , 'a' )
( 'c' , 'b' )复制代码
|
combinations
求列表或生成器中指定数目的元素不重复的所有组合
itertools.permutations(iter,r)
和 itertools.combinations(iter,r)
的区别是:前者是permutations
允许重复使用,后者combinations
是不能重复使用
1 2 | >>> print (list(itertools.combinations( 'abc' ,3)))
[( 'a' , 'b' , 'c' )]复制代码
|
combinations_with_replacement
combinations_with_replacement
和combinations
很相似,唯一的不同在于前者combinations_with_replacement
集合类型中的数据是可以重复的
1 2 | >>> print (list(itertools.combinations_with_replacement( 'abc' ,3)))
[( 'a' , 'a' , 'a' ), ( 'a' , 'a' , 'b' ), ( 'a' , 'a' , 'c' ), ( 'a' , 'b' , 'b' ), ( 'a' , 'b' , 'c' ), ( 'a' , 'c' , 'c' ), ( 'b' , 'b' , 'b' ), ( 'b' , 'b' , 'c' ), ( 'b' , 'c' , 'c' ), ( 'c' , 'c' , 'c' )]复制代码
|
accumulate
accumulate
用于对列表中元素逐个累加
1 2 3 4 | >>> import itertools
>>> x = itertools.accumulate(range(10))
>>> print (list(x))
[0, 1, 3, 6, 10, 15, 21, 28, 36, 45]复制代码
|
compress
compress()
是筛选工具,它接受一个可迭代对象以及一个布尔选择序列作为输入,输出时会将所有布尔序列中为True的可迭代对象输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 | import itertools
its=[ "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" ]
selector=[True,False,1,0,3,False,-2, "y" ]
for item in itertools.compress(its,selector):
print (item)
a
c
e
g
h
复制代码
|
count
count(初值=0, 步长=1)
是 创建一个迭代器,从传入的起始参数开始的均匀间隔的数值。
我们来看一个简单的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | from itertools import count
for i in count (10): #从10开始无限循环
if i > 20:
break
else :
print (i)
10
11
12
13
14
15
16
17
18
19
20复制代码
|
chain
chain链条,主要用来把多个序列连在一起做迭代。
1 2 3 4 5 6 7 8 9 10 11 | import itertools
chain = itertools.chain([1, 2, 3], [4, 5, 6])
for c in chain:
print (c)
1
2
3
4
5
6
复制代码
|
chain还有一个非常重要的功能就是展平列表。
1 2 | >>> list(itertools.chain([1, 2, 3], [4, 5], [6] ,[7,8]))
[1, 2, 3, 4, 5, 6, 7, 8]复制代码
|
cycle
1 2 3 4 | import itertools
cycle = itertools.cycle([1, 2, 3])
for c in cycle:
print (c)复制代码
|
运行结果输出 1 2 3 1 2 3……一直周而复始,永不停息。
相关免费学习推荐:python视频教程
以上就是深入认识Python中的itertools模块的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
Python常用类型转换实现
Python压缩与解压缩zip文件的实现方法
Python怎么安装jieba库
matplotlib中对图形颜色和线条的填充
使用Python快速搭建http服务和文件共享服务
什么是Python中唯一的映射类型
Python实现求笛卡尔乘积方法详解
Python中pass的作用是什么
Python怎么模拟点击网页按钮
Python和c语言哪个简单
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » 深入认识Python中的itertools模块