0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python系统库itertools的详细资料介绍

马哥Linux运维 来源:未知 作者:易水寒 2018-06-18 17:08 次阅读

前言

最近事情不是很多,想写一些技术文章分享给大家,同时也对自己一段时间来碎片化接受的知识进行一下梳理,所谓写清楚才能说清楚,说清楚才能想清楚,就是这个道理了。

很多人都致力于把Python代码写得更Pythonic,一来更符合规范且容易阅读,二来一般Pythonic的代码在执行上也更有效率。今天就先给大家介绍一下Python的系统库itertools。

itertools库

迭代器(生成器)在Python中是一种很常用也很好用的数据结构,比起列表(list)来说,迭代器最大的优势就是延迟计算,按需使用,从而提高开发体验和运行效率,以至于在Python 3中map,filter等操作返回的不再是列表而是迭代器。

话虽这么说但大家平时用到的迭代器大概只有range了,而通过iter函数把列表对象转化为迭代器对象又有点多此一举,这时候我们今天的主角itertools就该上场了。

使用itertools

itertools中的函数大多是返回各种迭代器对象,其中很多函数的作用我们平时要写很多代码才能达到,而在运行效率上反而更低,毕竟人家是系统库。

itertools.accumulate

简单来说就是累加。

>>> import itertools>>> x = itertools.accumulate(range(10))>>> print(list(x))[0, 1, 3, 6, 10, 15, 21, 28, 36, 45]

itertools.chain

连接多个列表或者迭代器。

>>> x = itertools.chain(range(3), range(4), [3,2,1])>>> print(list(x))[0, 1, 2, 0, 1, 2, 3, 3, 2, 1]

itertools.combinations

求列表或生成器中指定数目的元素不重复的所有组合

>>> x = itertools.combinations(range(4), 3)>>> print(list(x))[(0, 1, 2), (0, 1, 3), (0, 2, 3), (1, 2, 3)]

itertools.combinations_with_replacement

允许重复元素的组合

>>> x = itertools.combinations_with_replacement('ABC', 2)>>> print(list(x))[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

itertools.compress

按照真值表筛选元素

>>> x = itertools.compress(range(5), (True, False, True, True, False))>>> print(list(x))[0, 2, 3]

itertools.count

就是一个计数器,可以指定起始位置和步长

>>> x = itertools.count(start=20, step=-1)>>> print(list(itertools.islice(x, 0, 10, 1)))[20, 19, 18, 17, 16, 15, 14, 13, 12, 11]

itertools.cycle

循环指定的列表和迭代器

>>> x = itertools.cycle('ABC')>>> print(list(itertools.islice(x, 0, 10, 1)))['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C', 'A']

itertools.dropwhile

按照真值函数丢弃掉列表和迭代器前面的元素

>>> x = itertools.dropwhile(lambda e: e < 5, range(10))>>> print(list(x))[5, 6, 7, 8, 9]

itertools.filterfalse

保留对应真值为False的元素

>>> x = itertools.filterfalse(lambda e: e < 5, (1, 5, 3, 6, 9, 4))>>> print(list(x))[5, 6, 9]

itertools.groupby

按照分组函数的值对元素进行分组

>>> x = itertools.groupby(range(10), lambda x: x < 5 or x > 8) >>> for condition, numbers in x: ... print(condition, list(numbers)) True [0, 1, 2, 3, 4] False [5, 6, 7, 8] True [9]

itertools.islice

上文使用过的函数,对迭代器进行切片

>>> x = itertools.islice(range(10), 0, 9, 2)>>> print(list(x))[0, 2, 4, 6, 8]

itertools.permutations

产生指定数目的元素的所有排列(顺序有关)

>>> x = itertools.permutations(range(4), 3)>>> print(list(x))[(0, 1, 2), (0, 1, 3), (0, 2, 1), (0, 2, 3), (0, 3, 1), (0, 3, 2), (1, 0, 2), (1, 0, 3), (1, 2, 0), (1, 2, 3), (1, 3, 0), (1, 3, 2), (2, 0, 1), (2, 0,3), (2, 1, 0), (2, 1, 3), (2, 3, 0), (2, 3, 1), (3, 0, 1), (3, 0, 2), (3, 1, 0), (3, 1, 2), (3, 2, 0), (3, 2, 1)]

itertools.product

产生多个列表和迭代器的(积)

>>> x = itertools.product('ABC', range(3))>>>>>> print(list(x))[('A', 0), ('A', 1), ('A', 2), ('B', 0), ('B', 1), ('B', 2), ('C', 0), ('C', 1), ('C', 2)]

itertools.repeat

简单的生成一个拥有指定数目元素的迭代器

>>> x = itertools.repeat(0, 5)>>> print(list(x))[0, 0, 0, 0, 0]

itertools.starmap

类似map

>>> x = itertools.starmap(str.islower, 'aBCDefGhI')>>> print(list(x))[True, False, False, False, True, True, False, True, False]

itertools.takewhile

与dropwhile相反,保留元素直至真值函数值为假。

>>> x = itertools.takewhile(lambda e: e < 5, range(10))>>> print(list(x))[0, 1, 2, 3, 4]

itertools.tee

这个函数我也不是很懂,似乎是生成指定数目的迭代器

>>> x = itertools.tee(range(10), 2)>>> for letters in x:... print(list(letters))...[0, 1, 2, 3, 4, 5, 6, 7, 8, 9][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

itertools.zip_longest

类似于zip,不过已较长的列表和迭代器的长度为准

>>> x = itertools.zip_longest(range(3), range(5))>>> y = zip(range(3), range(5))>>> print(list(x))[(0, 0), (1, 1), (2, 2), (None, 3), (None, 4)]>>> print(list(y))[(0, 0), (1, 1), (2, 2)]

结语

大概就总结到这里,不过老实说Python的各种语言特性和库还是要多用才能熟练,最终达到随手拈来的程度,装逼的说就是由术入道。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    3845

    浏览量

    61223
  • 生成器
    +关注

    关注

    7

    文章

    300

    浏览量

    20113
  • python
    +关注

    关注

    51

    文章

    4657

    浏览量

    83379

原文标题:这段代码很Pythonic | 相见恨晚的 itertools 库

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PCIE总线详细资料

    PCIE总线详细资料
    发表于 02-15 15:23

    ADRF5132BCPZN-R7详细资料

    详细资料
    发表于 11-25 09:55

    求大神分享CH32F103的详细资料

    有CH32F103的详细资料吗?网站只有简单的介绍资料。我申请到样片和评估板后,发现找不到芯片的详细资料。评估板也和网站上的图纸,配置不一样。
    发表于 06-06 07:23

    SV601187的详细资料合集包括了电路图,原理图和介绍详细资料概述

    本文档的主要内容详细介绍的是SV601187的详细资料合集包括了电路图,原理图和介绍详细资料概述。
    发表于 07-30 08:00 18次下载
    SV601187的<b class='flag-5'>详细资料</b>合集包括了电路图,原理图和<b class='flag-5'>介绍</b>等<b class='flag-5'>详细资料</b>概述

    基于Python的中国平安保险api调用代码实例详细资料免费下载

    本文档的主要内容详细介绍的是基于Python的中国平安保险api调用代码实例详细资料免费下载。
    发表于 09-06 14:25 2次下载
    基于<b class='flag-5'>Python</b>的中国平安保险api调用代码实例<b class='flag-5'>详细资料</b>免费下载

    基于Python的商标信息查询api调用代码实例的详细资料免费下载

    本文档的主要内容详细介绍的是基于Python的商标信息查询api调用代码实例的详细资料免费下载。
    发表于 09-06 15:00 12次下载
    基于<b class='flag-5'>Python</b>的商标信息查询api调用代码实例的<b class='flag-5'>详细资料</b>免费下载

    燃机进气系统的各部件详细资料介绍免费下载

    本文档的主要内容详细介绍的是燃机进气系统的各部件详细资料介绍免费下载。
    发表于 09-17 08:00 0次下载
    燃机进气<b class='flag-5'>系统</b>的各部件<b class='flag-5'>详细资料</b><b class='flag-5'>介绍</b>免费下载

    赫星mini飞控载板的详细资料介绍

    本文档的主要内容详细介绍的是赫星mini飞控载板的详细资料介绍、引脚数据、使用方法及注意事项等
    发表于 02-27 08:00 0次下载
    赫星mini飞控载板的<b class='flag-5'>详细资料</b><b class='flag-5'>介绍</b>

    python的内置函数详细资料概述

    本文档的主要内容详细介绍的是python的内置函数详细资料概述。
    发表于 11-18 08:00 0次下载

    信号与系统总复习的详细资料说明

    本文档的主要内容详细介绍的是是信号与系统总复习的详细资料说明。
    发表于 03-09 08:00 0次下载
    信号与<b class='flag-5'>系统</b>总复习的<b class='flag-5'>详细资料</b>说明

    使用python实现海龟作图的详细资料说明

    本文档的主要内容详细介绍的是使用python实现海龟作图的详细资料说明。
    发表于 04-27 08:00 3次下载
    使用<b class='flag-5'>python</b>实现海龟作图的<b class='flag-5'>详细资料</b>说明

    python教程之随机与布尔的详细资料说明

    本文档的主要内容详细介绍的是python教程之随机与布尔的详细资料说明。
    发表于 04-26 08:00 14次下载
    <b class='flag-5'>python</b>教程之随机与布尔的<b class='flag-5'>详细资料</b>说明

    TE温控系统技术的详细资料介绍

    本文档的主要内容详细介绍的是TE温控系统技术的详细资料介绍
    发表于 11-27 04:40 6次下载

    Python的100个小例子详细资料说明

    本文档的主要内容详细介绍的是Python的100个小例子详细资料说明。
    发表于 02-05 14:05 14次下载
    <b class='flag-5'>Python</b>的100个小例子<b class='flag-5'>详细资料</b>说明

    FAT32文件系统详细资料介绍

    本文档的主要内容详细介绍的是FAT32文件系统详细资料介绍
    发表于 03-16 16:35 32次下载