Python itertools模块
今天学了简单好玩的模块。itertools模块,简单的说,itertools模块就是产生一个循环器
来看下这个模块的功能都有哪些吧
无穷循环器
count() 从開始的数字一直数下去
count(10) #--> 10 11 12 13 14 15 …
count(10,2) #--> 10 12 14 16 18 20 …
cycle() 不停的将可迭代元素进行循环
cycle(‘abcd’) #--> a b c d a b c d a …
repeat() 不停的反复一个元素
repeat(20) #--> 20 20 20 20 20 …
repeat(20,3) #--> 20 20 20
有限循环器
accumulate() 将可迭代的容器进行累加,也能够自己指定详细的操作
accumulate(range(10)) #--> 0 1 3 6 10
accumulate(range(1,5), func = operator.mul) #--> 1 2 6 24
chain() 将几个可迭代的容器依次迭代
chain(range(5),'abcd') #--> 0 1 2 3 4 a b c d
chain(['abcd', 'bcde', 'cdef']) #--> abcd bcde cdef
chain.from_iterable() 将可迭代容器里面的元素再次进行迭代一次
chain.from_iterable(['abcd', 'bcde', 'cdef']) #--> a b c d b c d e c d e f
chain.from_iterable([['abcd', 'bcde','cdef'],'abcd']) #--> abcd bcdecdef a b c d
compress() 两个參数分别为data, selectors, 依据selectors中的真假情况返回data中的元素
compress('ABCDEF', [1,0,1,0,1,1]) #--> A C E F
dropwhile() 原型为dropwhile(predicate, iterable)当predicate返回True时,跳过元素。一旦函数返回False,则開始收集剩下的全部元素到循环器
dropwhile(lambda x: x<5, [1,4,6,4,1]) #--> 6 4 1
filterfalse() 原型为filterfalse(predicate, iterable)当predicate返回False时,才将iterable中的元素加入进循环器
filterfalse(lambda x : x%2 , range(10)) #--> 0 2 4 6 8
groupby() 原型为groupby(iterable, key=None)将key的结果作用于iterable中的元素,将拥有同样返回结果的元素增加到循环器中。该函数之前须要确保iterable是经过排序的
演示样例一:
for i,g in itertools.groupby('AAAABBBCCDAABBB'):
print(i,list(g))
结果:
A ['A', 'A', 'A','A']
B ['B', 'B', 'B']
C ['C', 'C']
D ['D']
A ['A', 'A']
B ['B', 'B', 'B']
演示样例二:
def height_classify(h):
if h>180 :
return 'tall'
elif h< 160 :
return 'short'
else :
return 'middle'
friends = [192, 158, 168, 195, 185, 170, 135,174, 182]
friends = sorted(friends, key =height_classify)
for m, n in itertools.groupby(friends, key =height_classify):
print(m)
print(list(n))
结果:
middle
[168, 170, 174]
short
[158, 135]
tall
[192, 195, 185, 182]
islice() 原型为islice(iterable, stop)或islice(iterable, start, stop[, step])
islice('ABCDEFG', 2) #--> A B
islice('ABCDEFG', 2, 4) #--> C D
islice('ABCDEFG', 2, None) #--> C D E F G
islice('ABCDEFG', 0, None, 2) #--> A C E G
starmap() 原型为starmap(function, iterable)
starmap(pow, [(2,5), (3,2), (10,3)]) #--> 32 9 1000
takewhile() 原型为takewhile(predicate,iterable),与dropwhile()功能相反
takewhile(lambda x: x<5, [1,4,6,4,1]) #--> 1 4
tee() 原型为tee(iterable, n=2); 从单个的iterable返回n个独立的循环器
zip_longest() 原型为zip_longest(*iterables,fillvalue=None)
zip_longest('abcd','123',fillvalue='*') #--> ('a', '1')('b','2')('c', '3')('d', '*')
组合生成器
product() 原型为product(*iterables, repeat=1)做笛卡尔乘积
product('abc','xy') #--> ('a', 'x')('a', 'y')('b', 'x')('b', 'y')('c','x')('c', 'y')
permutations() 原型为permutations(iterable,r=None)全排列
permutations('abc') #--> ('a', 'b', 'c')('a', 'c', 'b')('b', 'a', 'c')('b','c', 'a')('c', 'a', 'b')('c', 'b', 'a')
permutations('abcd', r=2) #--> ('a', 'b')('a', 'c')('a', 'd')('b', 'a')('b','c')('b', 'd')('c', 'a')('c', 'b')('c', 'd')('d', 'a')('d', 'b')('d', 'c')
combinations() 原型为combinations(iterable, r)
combinations('abcd',r=3) #--> ('a', 'b', 'c')('a', 'b', 'd')('a', 'c', 'd')('b','c', 'd')
combinations_with_replacement() 原型为combinations_with_replacement(iterable,r)
combinations_with_replacement('abc',r=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')
Python itertools模块相关推荐
- Python -itertools模块combinations方法
itertools模块combinations(iterable, r)方法可以创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序. 例1 ...
- python itertools模块位置_Python高效编程之itertools模块详解
0 前言 说到处理循环,我们习惯使用for, while等,比如依次打印每个列表中的字符:lis = [ I , love , python ] for i in lis: print(i) I lo ...
- python itertools模块_Python标准模块--itertools
1 模块简介 Python提供了itertools模块,可以创建属于自己的迭代器.itertools提供的工具快速并且节约内存.开发者可以使用这些工具创建属于自己特定的迭代器,这些特定的迭代器可以用于 ...
- python itertools模块chain函数功能详解 itertools.chain(*iterable)
Itertools模块, itertools提供了高效快捷的用于操作迭代对象的函数.通过使用这个模块,可以简化代码. Itertools.chain语法 Itertools.chain(*iterab ...
- Python itertools 模块
Python itertools 本模块标准化了一个快速.高效利用内存的核心工具集.它们一起形成了"迭代器代数",这使得在纯 Python 中有可能创建简洁又高效的专用工具. 无穷 ...
- python itertools模块详解
目录 简介 无穷迭代器 count() cycle() repeat() 有限迭代器 chain() groupby() accumulate() 组合迭代器 product() permutatio ...
- Python itertools模块
# Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数 # 1.count() import itertools natuals = itertools.count(1) ...
- python itertools模块_Python标准库:itertools模块
来源:j_hao104 简介 官方描述:Functional tools for creating and using iterators.即用于创建高效迭代器的函数. itertools.chain ...
- python itertools模块_Python中的Itertools模块
itertools提供的工具快速且高效,为了提升代码质量及避免重复造轮子,有必要学习下. 无限迭代器 count(start=0, step=1) count迭代器以start为起点(默认0),ste ...
最新文章
- printf(%d, -10u); 这个输出什么呀, 0或1?
- mongodb android,如何在Android中连接到MongoDB数据库?
- 第五课.Python函数(二)
- 虚拟机非法关机不能重启了
- 伪mac android,Mac,android sdk,monkey压力测试,真机
- 浅析php反序列化字符串逃逸
- Kylin3.1.3连接Hbase报错找不到 hbase-common lib not found的解决办法
- 开源html5游戏-少年行
- 小学数学计算题随机出题软件
- atitit.提取zip rar文件列表 java php c# 的原理与设计
- 有关PyCharm的破解安装
- Java二维数组——关灯游戏算法
- 爬取巨潮资讯网中与“贵州茅台”相关的公告的标题和网址。
- java 取当天0点_java 获取当天(今日)零点零分零秒
- 移动宽带虚拟网服务器设置,移动宽带路由器怎么设置?
- Thinkphp QVD-2022-46174 多语言rce
- navicat的使用以及学生信息表的操作
- 绝路之后,人人网还有三条去路
- iOS 【利用Markdown编辑GitHub仓库的README文件】
- SqlServer_select-多次sum查询结果合并;
热门文章
- Java程序员从笨鸟到菜鸟全部博客目录
- 在Java中如何高效的判断数组中是否包含某个元素
- 世界围棋人机大战、顶峰对决第一盘:围棋世界冠军Lee Sedol(李世石,围棋职业九段)对战Google DeepMind AlphaGo围棋程序,Google AlphaGo首战告捷
- Coursera课程Python for everyone:Quiz: Reading Web Data From Python
- Stanford UFLDL教程 栈式自编码算法
- 大话设计模式(十四 设计模式不能戏说!设计模式怎就不能戏说?)
- 由浅入深,走进Python装饰器-----第五篇:进阶--类装饰类
- 开始→运行→命令集锦
- iBATIS In Action:使用高级查询技术(一)
- 树莓派进阶之路 (019) - 树莓派通过filezilla,samba与PC文件共享(转)