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

    文章

    4406

    浏览量

    66827
  • 生成器
    +关注

    关注

    7

    文章

    322

    浏览量

    22502
  • python
    +关注

    关注

    57

    文章

    4857

    浏览量

    89566

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    AD元件索引表详细资料免费下载

    本文档的主要内容详细介绍的是AD元件索引表详细资料免费下载。
    发表于 09-28 08:00 0次下载
    AD元件<b class='flag-5'>库</b>索引表<b class='flag-5'>详细资料</b>免费下载

    STM32封装详细资料免费下载

    本文档的主要内容详细介绍的是STM32封装详细资料免费下载。
    发表于 10-15 08:00 0次下载

    数据库系统概论之数据管理系统详细资料概述

    本文档的主要内容详细介绍的是数据库系统概论之数据管理系统详细资料概述主要内容包括了:1、DBM
    发表于 11-15 15:12 0次下载
    数据<b class='flag-5'>库系统</b>概论之数据<b class='flag-5'>库</b>管理<b class='flag-5'>系统</b><b class='flag-5'>详细资料</b>概述

    DXP常用PCB2.0版详细资料免费下载

    本文档的主要内容详细介绍的是DXP常用PCB2.0版详细资料免费下载主要内容包括了:电阻,封装,元件
    发表于 12-06 08:00 0次下载

    STSW STM8069固件详细资料免费下载

    本文档的主要内容详细介绍的是STSW STM8069固件详细资料免费下载。
    发表于 12-07 08:00 51次下载
    STSW STM8069固件<b class='flag-5'>库</b>的<b class='flag-5'>详细资料</b>免费下载

    AD底板封装和底板元件详细资料免费下载

    本文档的主要内容详细介绍的是AD底板封装和底板元件详细资料免费下载。
    发表于 12-21 08:00 0次下载
    AD底板封装<b class='flag-5'>库</b>和底板元件<b class='flag-5'>库</b>的<b class='flag-5'>详细资料</b>免费下载

    贴片电容封装详细资料免费下载

    本文档的主要内容详细介绍的是贴片电容封装详细资料免费下载。
    发表于 01-23 08:00 78次下载
    贴片电容封装<b class='flag-5'>库</b>的<b class='flag-5'>详细资料</b>免费下载

    Altium designer元件大全的详细资料合集

    本文档的主要内容详细介绍的是Altium designer元件大全的详细资料合集。
    发表于 03-12 08:00 0次下载
    Altium designer元件<b class='flag-5'>库</b>大全的<b class='flag-5'>详细资料</b>合集

    Altium Designer文件的详细资料合集免费下载

    本文档的主要内容详细介绍的是Altium Designer文件的详细资料合集免费下载。
    发表于 03-12 08:00 0次下载
    Altium Designer<b class='flag-5'>库</b>文件的<b class='flag-5'>详细资料</b>合集免费下载

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

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

    使用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>说明

    Python的常见详细资料介绍

    由于设计者和开源社区的共同努力,在python中有大量优秀的可以被直接调用以高效地完成不同需求的工作。这里列举一些常见常用的
    发表于 06-16 16:37 29次下载
    <b class='flag-5'>Python</b>的常见<b class='flag-5'>库</b><b class='flag-5'>详细资料</b><b class='flag-5'>介绍</b>

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

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