Python:itertools模块
#!/usr/bin/env python# coding:UTF-8"""@version: python3.x@author:曹新健@contact: 617349013@qq.com@software: PyCharm@file: itertools模块.py@time: 2018/11/7 11:15"""""
·
#!/usr/bin/env python
# coding:UTF-8
"""
@version: python3.x
@author:曹新健
@contact: 617349013@qq.com
@software: PyCharm
@file: itertools模块.py
@time: 2018/11/7 11:15
"""
"""
python标准链接库中提供了itertools模块,当中许多函数可以协助创建生成器和迭代器
"""
import itertools
"""
1、itertools.cycle(iterable):创建一个迭代器,对iterable中的元素反复执行循环操作
代码示例:
cycle_g = itertools.cycle("abcd")
for i in cycle_g:
print(i)
说明上述代码会循环打印 a b c d a b c ....,一直循环下去
2、itertools.repeat(object [,times]):创建一个迭代器,重复生成object,times(如果已提供)指定重复计数,
如果未提供times,将无止尽返回该对象
代码示例:
r = itertools.repeat("Good",5)
for i in r:
print(i,sep="",end="")
#上述代码打印GoodGoodGoodGoodGood
3、itertools.count(n[,m]):创建一个迭代器,生成从n开始的连续整数,如果忽略n,则从0开始计算。第二个参数
可省略,代表步长。
代码示例:
cn = itertools.count(5,2)
print(next(cn))
print(next(cn))
print(next(cn))
上述代码返回5 7 9即迭代器从5开始无限迭代,步长为2
4、itertools.accumulate(可迭代对象[, 函数]):accumulate 迭代器将返回累计求和结果,或者传入两个参数的话,
由传入的函数累积计算的结果。默认设定为相加。
代码示例:
print(list(itertools.accumulate([1,2,3,4,5])))
#打印[1, 3, 6, 10, 15]
print(list(itertools.accumulate([1,2,3,4,5],int.__mul__)))
#打印[1, 2, 6, 24, 120]
5、itertools.chain(iter1, iter2, ..., iterN):创建一个新迭代器来将所有的迭代器链接起来逐一返回,直到全
部返回完毕
代码示例:
print(list(itertools.chain("ABC",[1,2,3])))
#返回['A', 'B', 'C', 1, 2, 3]
6、itertools.chain.from_iterable(iterables):同itertools.chain(iter1, iter2, ..., iterN)功能类似
7、itertools.dropwhile(predicate, iterable):创建一个迭代器,只要函数predicate(item)为True,就丢弃
iterable中的项,如果predicate返回False,就会生成iterable的后续所有项。
代码示例:
print(list(itertools.dropwhile(lambda x: x < 5,[1,2,4,7,3,8])))
#返回[7, 3, 8]
8、itertools.takewhile(predicate, iterable):创建一个迭代器,生成iterable中predicate(item)为True的项
,只要predicate计算为False,迭代就会立即停止
代码示例:
print(list(itertools.takewhile(lambda x: x < 5,[1,2,4,7,3,8])))
#返回[1, 2, 4]
9、itertools.filterfalse(predicate, iterable):创建一个迭代器,仅生成iterable中predicate(item)为False的
项。
代码示例:
print(list(itertools.filterfalse(lambda x: x %2,[1,2,4,7,3,8])))
#返回[2, 4, 8]
10、itertools.groupby(iterable [,key]):创建一个迭代器,对iterable生成的相邻项进行分组。此函数返回的迭代
器生成元素(key, group),其中key是分组的键值,group是迭代器,生成组成该组的所有项。
代码示例:
names = ["cxj","wcq","hj","caoxinjian","wuchangquan","hanjia","djj","duanjiajing"]
for key,items in itertools.groupby(names,lambda name:len(name)):
print(key,list(items))
'''
返回值:
3 ['cxj', 'wcq']
2 ['hj']
10 ['caoxinjian']
11 ['wuchangquan']
6 ['hanjia']
3 ['djj']
11 ['duanjiajing']
'''
11、itertools.combinations(iterable, r):创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序
列中的项按输入iterable中的顺序排序。
代码示例:
for i in itertools.combinations([1,2,3,4], 3):
print(i)
'''
返回值:
(1, 2, 3)
(1, 2, 4)
(1, 3, 4)
(2, 3, 4)
'''
12、itertools.islice(iterable, [start, ] stop [, step]):创建一个迭代器,生成项的方式类似于切片返回值:
iterable[start : stop : step],将跳过前start个项,迭代在stop所指定的位置停止,step指定用于跳过项
的步幅。与切片不同,负值不会用于任何start,stop和step,如果省略了start,迭代将从0开始,如果省略了
step,步幅将采用1。
代码示例:
print(list(itertools.islice([1,2,3,4,5,6],2)))
print(list(itertools.islice([1,2,3,4,5,6],2,4)))
print(list(itertools.islice([1,2,3,4,5,6],2,None)))
print(list(itertools.islice([1,2,3,4,5,6],2,None,2)))
'''
返回值:
[1, 2]
[3, 4]
[3, 4, 5, 6]
[3, 5]
'''
13、itertools.permutations(iterable [,r]):创建一个迭代器,返回iterable中所有长度为r的项目序列,如果省
略了r,那么序列的长度与iterable中的项目数量相同.
示例代码:
for i in itertools.permutations([1,2,3,4], 3):
print(i)
'''
返回值:
(1, 2, 3)
(1, 2, 4)
(1, 3, 2)
(1, 3, 4)
(1, 4, 2)
(1, 4, 3)
(2, 1, 3)
......
'''
14、itertools.product(iter1, iter2, ... iterN, [repeat=1]):创建一个迭代器,生成表示item1,item2等中的
项目的笛卡尔积的元组,repeat是一个关键字参数,指定重复生成序列的次数。
示例代码:
print(list(itertools.product(range(2), repeat=1)))
print(list(itertools.product(range(2), repeat=2)))
print(list(itertools.product(range(2), repeat=3)))
print(list(itertools.product(range(3), repeat=2)))
print(list(itertools.product('AB', 'xy')))
product() -->
'''
[0, 1]
[(0,), (1,)]
[(0, 0), (0, 1), (1, 0), (1, 1)]
[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
[('A', 'x'), ('A', 'y'), ('B', 'x'), ('B', 'y')]
'''
15、itertools.starmap(func [, iterable]):创建一个迭代器,生成值func(*item),其中item来自iterable,只有
当iterable生成的项适用于这种调用函数的方式时,此函数才有效。
示例代码:
print(list(itertools.starmap(pow, [(2,3), (3,3), (10,3)])))
#返回值:[8, 27, 1000]
16、itertools.tee(iterable [, n]):从iterable创建n个独立的迭代器,创建的迭代器以n元组的形式返回,n的默
认值为2,此函数适用于任何可迭代的对象,但是,为了克隆原始迭代器,生成的项会被缓存,并在所有新创建
的迭代器中使用,一定要注意,不要在调用tee()之后使用原始迭代器iterable,否则缓存机制可能无法正确工
作。
示例代码:
for i in itertools.tee([1,2,3,4],3):
print(list(i))
'''
返回值:
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]
'''
"""
更多推荐
已为社区贡献51条内容
所有评论(0)