今天学了简单好玩的模块。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模块相关推荐

  1. Python -itertools模块combinations方法

    itertools模块combinations(iterable, r)方法可以创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序. 例1 ...

  2. python itertools模块位置_Python高效编程之itertools模块详解

    0 前言 说到处理循环,我们习惯使用for, while等,比如依次打印每个列表中的字符:lis = [ I , love , python ] for i in lis: print(i) I lo ...

  3. python itertools模块_Python标准模块--itertools

    1 模块简介 Python提供了itertools模块,可以创建属于自己的迭代器.itertools提供的工具快速并且节约内存.开发者可以使用这些工具创建属于自己特定的迭代器,这些特定的迭代器可以用于 ...

  4. python itertools模块chain函数功能详解 itertools.chain(*iterable)

    Itertools模块, itertools提供了高效快捷的用于操作迭代对象的函数.通过使用这个模块,可以简化代码. Itertools.chain语法 Itertools.chain(*iterab ...

  5. Python itertools 模块

    Python itertools 本模块标准化了一个快速.高效利用内存的核心工具集.它们一起形成了"迭代器代数",这使得在纯 Python 中有可能创建简洁又高效的专用工具. 无穷 ...

  6. python itertools模块详解

    目录 简介 无穷迭代器 count() cycle() repeat() 有限迭代器 chain() groupby() accumulate() 组合迭代器 product() permutatio ...

  7. Python itertools模块

    # Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数 # 1.count() import itertools natuals = itertools.count(1) ...

  8. python itertools模块_Python标准库:itertools模块

    来源:j_hao104 简介 官方描述:Functional tools for creating and using iterators.即用于创建高效迭代器的函数. itertools.chain ...

  9. python itertools模块_Python中的Itertools模块

    itertools提供的工具快速且高效,为了提升代码质量及避免重复造轮子,有必要学习下. 无限迭代器 count(start=0, step=1) count迭代器以start为起点(默认0),ste ...

最新文章

  1. printf(%d, -10u); 这个输出什么呀, 0或1?
  2. mongodb android,如何在Android中连接到MongoDB数据库?
  3. 第五课.Python函数(二)
  4. 虚拟机非法关机不能重启了
  5. 伪mac android,Mac,android sdk,monkey压力测试,真机
  6. 浅析php反序列化字符串逃逸
  7. Kylin3.1.3连接Hbase报错找不到 hbase-common lib not found的解决办法
  8. 开源html5游戏-少年行
  9. 小学数学计算题随机出题软件
  10. atitit.提取zip rar文件列表 java php c# 的原理与设计
  11. 有关PyCharm的破解安装
  12. Java二维数组——关灯游戏算法
  13. 爬取巨潮资讯网中与“贵州茅台”相关的公告的标题和网址。
  14. java 取当天0点_java 获取当天(今日)零点零分零秒
  15. 移动宽带虚拟网服务器设置,移动宽带路由器怎么设置?
  16. Thinkphp QVD-2022-46174 多语言rce
  17. navicat的使用以及学生信息表的操作
  18. 绝路之后,人人网还有三条去路
  19. iOS 【利用Markdown编辑GitHub仓库的README文件】
  20. SqlServer_select-多次sum查询结果合并;

热门文章

  1. Java程序员从笨鸟到菜鸟全部博客目录
  2. 在Java中如何高效的判断数组中是否包含某个元素
  3. 世界围棋人机大战、顶峰对决第一盘:围棋世界冠军Lee Sedol(李世石,围棋职业九段)对战Google DeepMind AlphaGo围棋程序,Google AlphaGo首战告捷
  4. Coursera课程Python for everyone:Quiz: Reading Web Data From Python
  5. Stanford UFLDL教程 栈式自编码算法
  6. 大话设计模式(十四 设计模式不能戏说!设计模式怎就不能戏说?)
  7. 由浅入深,走进Python装饰器-----第五篇:进阶--类装饰类
  8. 开始→运行→命令集锦
  9. iBATIS In Action:使用高级查询技术(一)
  10. 树莓派进阶之路 (019) - 树莓派通过filezilla,samba与PC文件共享(转)