资讯专栏INFORMATION COLUMN

itertools模块超实用方法

caohaoyu / 2146人阅读

摘要:相信大家在学习的过程中都用到过这个模块,但是可能只是用到了其中的一两个方法,对于其更强大的功能没有更深的认识。今天我就按照自己的方式向大家介绍一下这个模块。

相信大家在学习python的过程中都用到过这个模块,但是可能只是用到了其中的一两个方法,对于其更强大的功能没有更深的认识。今天我就按照自己的方式向大家介绍一下这个模块。
groupby:用于分组

rows=[
    {"name":"jim","date":"07/01"},
    {"name":"tom","date":"07/01"},
    {"name":"rose","date":"07/01"},
    {"name":"tom","date":"07/02"},
    {"name":"jim","date":"07/03"},
    {"name":"rose","date":"07/02"},
]
#groupby只能对连续数据进行分组,因此不能确定数据有序的情况下,建议进行排序操作
gbrows=sorted(rows,key=itemgetter["date"])

for gbdata,row in gbrows(gbrows,key=itemgetter["date"])
    print(gbdata)
    for i in row:
        print(i)
        
#以下是输出结果:
07/01/2018
{"name": "jim", "date": "07/01/2018"}
{"name": "tom", "date": "07/01/2018"}
{"name": "rose", "date": "07/01/2018"}
07/02/2018
{"name": "tom", "date": "07/02/2018"}
{"name": "rose", "date": "07/02/2018"}
07/03/2018
{"name": "jim", "date": "07/03/2018"}

permutations:按照给定位数对可迭代对象内元素进行组合

listed = ["a","b","c","d"]

for i in permutations(listed,3):
    print(i)

#以下是输出结果(由于结果比较多,我对格式进行了变化,但数据都是正确的)
("a", "b", "c") ("a", "b", "d") ("a", "c", "b") ("a", "c", "d") ("a", "d", "b") ("a", "d", "c")
("b", "a", "c") ("b", "a", "d") ("b", "c", "a") ("b", "c", "d") ("b", "d", "a")
("b", "d", "c")
("c", "a", "b") ("c", "a", "d") ("c", "b", "a") ("c", "b", "d") ("c", "d", "a") ("c", "d", "b")
("d", "a", "b") ("d", "a", "c") ("d", "b", "a") ("d", "b", "c") ("d", "c", "a") ("d", "c", "b")

combinations:按照给定位数对可迭代对象内元素进行组合,但是结果不重复

listed = ["a","b","c","d"]

for i in combinations(listed,3):
    print(i)
#以下是输出结果
("a", "b", "c")
("a", "b", "d")
("a", "c", "d")
("b", "c", "d")

combinations_with_replacement:与combinations区别就是同一元素可以使用多次

listed = ["a","b","c"]    #由于结果数据太多,我减少源数据量

for i in combinations_with_replacement(listed,3):
    print(i)
    
#以下是输出结果
("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")

zip_longest:对多个数据按索引进行组合,并根据迭代对象的大小,不足使用fillvalue默认值替代

a=[1,2,3]
b=["a","b"]

for i in zip_longest(a,b,fillvalue="nihao"):
    print(i)
    
for i in zip(a,b):
    print(i)    
#zip是一个python内置函数,与zip_longest不同的是匹配到迭代对象最小的最后元素就结束
#结果对比:
zip_lengest:            zip:
    (1, "a")                (1, "a")
    (2, "b")                (2, "b")
    (3, "nihao")

dropwhile:对可迭代对象的元素依次进行函数过滤,遇到返回False的元素就停止

listed=[-1,0,-3,2,-5,4,2]

for i in dropwhile(lambda s:s<3,listed):
    print(i)
    
#输出结果:
4
2

product:可以说是combinations的升级版,对多个序列进行组合,且无重复

list1=[1,2,3]
list2=[4,5]
list3=["a"]

for i in product(list1,list2,list3):
    print(i)
#结果:
(1, 4, "a")
(1, 5, "a")
(2, 4, "a")
(2, 5, "a")
(3, 4, "a")
(3, 5, "a")

islice:对迭代器,可迭代对象进行切片操作

iter=(i for i in range(10))

for i in islice(iter,0,10,2):
    print(i)
#结果为:
0
2
4
6
8

chain:对多个可迭代对象进行组合

list1=[1,2,3]

set1={"a","b"}

for i in chain(list1,set1):
    print(i)

总结:itertools这个模块可以解决以后我们对多个iterable进行组合的问题。
更详细的分类可以参考:https://segmentfault.com/a/11...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42822.html

相关文章

  • Python 进阶之路 (九) 再立Flag, 社区最全的itertools深度解析(上)

    摘要:例如,以下对两个的相应元素求和这个例子很好的解释了如何构建中所谓的迭代器代数的函数的含义。为简单起见,假设输入的长度可被整除。接受两个参数一个可迭代的正整数最终会在中个元素的所有组合的元组上产生一个迭代器。 前言 大家好,今天想和大家分享一下我的itertools学习体验及心得,itertools是一个Python的自带库,内含多种非常实用的方法,我简单学习了一下,发现可以大大提升工作...

    tuantuan 评论0 收藏0
  • python 好用的迭代兵器库itertools,十八般兵器哪18般?

    摘要:三国时代著名的兵器鉴别家吕虔根据兵器的特点对汉武帝钦定的十八般兵器重新排列为九长九短。明代五杂俎和清代坚集两书所载十八般兵器为弓弩枪刀剑矛盾斧钺戟黄锏挝殳棍叉耙头锦绳套索白打拳术。后人称其为小十八般。 知识点 在古典小说和传统评话中,常说武艺高强的人是十八般武艺样样精通...

    番茄西红柿 评论0 收藏2637
  • python高级特性

    摘要:常规的使用来统计一段代码运行时间的例子输出结果总结其实是一门特别人性化的语言,但凡在工程中经常遇到的问题,处理起来比较棘手的模式基本都有对应的比较优雅的解决方案。 python的高级特性 名词与翻译对照表 generator 生成器 iterator 迭代器 collection 集合 pack/unpack 打包/解包 decorator 装饰器 context manager ...

    yexiaobai 评论0 收藏0
  • Python实用技法第14篇:根据字段将记录分组:itertools.groupby()

    摘要:上一篇文章实用技法第篇对自定义类对象排序下一篇文章实用技法第篇筛选序列中的元素需求 上一篇文章:Python实用技法第13篇:对自定义类对象排序:attrgetter下一篇文章:Python实用技法第15篇:筛选序列中的元素 1、需求

    zhaofeihao 评论0 收藏0
  • 经验拾忆(纯手工)=> Python好用深度技能工具介绍

    摘要:单元素元祖这是整数这才是元祖也许这两行,你们当时疑惑过,并且现在也都知道了,当然重点并不在这里。。虽然我水平很垃圾,但是我知道匿名函数有一种执行方式叫做自执行。看吧,这就是版的匿名函数自执行方法。 单元素元祖: a = (1) # 这是整数1 a = (1,) # 这才是元祖 也许这两行,你们当时疑惑过,并且现在也都知道了,当然重点并不在这里。。 我无聊的时候想过,为什么单...

    UnixAgain 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<