[转]itertools --- 为高效循环而创建迭代器的函数
本模块实现一系列 iterator ,这些迭代器受到APL,Haskell和SML的启发。为了适用于Python,它们都被重新写过。
本模块标准化了一个快速、高效利用内存的核心工具集,这些工具本身或组合都很有用。它们一起形成了“迭代器代数”,这使得在纯Python中有可能创建简洁又高效的专用工具。
例如,SML有一个制表工具: tabulate(f)
,它可产生一个序列 f(0), f(1), ...
。在Python中可以组合 map()
和 count()
实现: map(f, count())
。
这些内置工具同时也能很好地与 operator
模块中的高效函数配合使用。例如,我们可以将两个向量的点积映射到乘法运算符: sum(map(operator.mul, vector1, vector2))
。
无穷迭代器:
迭代器 | 实参 | 结果 | 示例 |
---|---|---|---|
count()
|
start, [step] | start, start+step, start+2*step, ... |
count(10) --> 10 11 12 13 14...
|
cycle()
|
p | p0, p1, ... plast, p0, p1, ... |
cycle('ABCD') --> A B C D A B CD ...
|
repeat()
|
elem [,n] | elem, elem, elem, ... 重复无限次或n次 |
repeat(10, 3) --> 10 10 10
|
根据最短输入序列长度停止的迭代器:
迭代器 | 实参 | 结果 | 示例 |
---|---|---|---|
accumulate()
|
p [,func] | p0, p0+p1, p0+p1+p2, ... |
accumulate([1,2,3,4,5]) --> 1 3 610 15
|
chain()
|
p, q, ... | p0, p1, ... plast, q0, q1, ... |
chain('ABC', 'DEF') --> A B C D EF
|
chain.from_iterable()
|
iterable | p0, p1, ... plast, q0, q1, ... |
chain.from_iterable(['ABC','DEF']) --> A B C D E F
|
compress()
|
data, selectors | (d[0] if s[0]), (d[1] if s[1]), ... |
compress('ABCDEF', [1,0,1,0,1,1])--> A C E F
|
dropwhile()
|
pred, seq | seq[n], seq[n+1], ... 从pred首次真值测试失败开始 |
dropwhile(lambda x: x<5,[1,4,6,4,1]) --> 6 4 1
|
filterfalse()
|
pred, seq | seq中pred(x)为假值的元素,x是seq中的元素。 |
filterfalse(lambda x: x%2,range(10)) --> 0 2 4 6 8
|
groupby()
|
iterable[, key] | 根据key(v)值分组的迭代器 | |
islice()
|
seq, [start,] stop [, step] | seq[start:stop:step]中的元素 |
islice('ABCDEFG', 2, None) --> CD E F G
|
starmap()
|
func, seq | func(*seq[0]), func(*seq[1]), ... |
starmap(pow, [(2,5), (3,2),(10,3)]) --> 32 9 1000
|
takewhile()
|
pred, seq | seq[0], seq[1], ..., 直到pred真值测试失败 |
takewhile(lambda x: x<5,[1,4,6,4,1]) --> 1 4
|
tee()
|
it, n | it1, it2, ... itn 将一个迭代器拆分为n个迭代器 | |
zip_longest()
|
p, q, ... | (p[0], q[0]), (p[1], q[1]), ... |
zip_longest('ABCD', 'xy',fillvalue='-') --> Ax By C- D-
|
排列组合迭代器:
迭代器 | 实参 | 结果 |
---|---|---|
product()
|
p, q, ... [repeat=1] | 笛卡尔积,相当于嵌套的for循环 |
permutations()
|
p[, r] | 长度r元组,所有可能的排列,无重复元素 |
combinations()
|
p, r | 长度r元组,有序,无重复元素 |
combinations_with_replacement()
|
p, r | 长度r元组,有序,元素可重复 |
product('ABCD', repeat=2)
|
AA AB AC AD BA BB BC BD CA CB CC CD DA DB DCDD
|
|
permutations('ABCD', 2)
|
AB AC AD BA BC BD CA CB CD DA DB DC
|
|
combinations('ABCD', 2)
|
AB AC AD BC BD CD
|
|
combinations_with_replacement('ABCD',2)
|
AA AB AC AD BB BC BD CC CD DD
|
、
[转]itertools --- 为高效循环而创建迭代器的函数相关推荐
- [Python] itertools.islice(iterable, start, stop[, step]) 创建迭代器并返回所选元素
首先介绍一下itertools - Functions creating iterators for efficient looping(函数创建迭代器以实现高效循环) 功能: 创建一个迭代器,从迭代 ...
- Python——itertools.chain.from_iterable将多个迭代器连接成一个统一的迭代器的最高效的方法
1 致谢 感谢网友"-柚子皮-"的帮助, 原文链接如下: https://blog.csdn.net/pipisorry/article/details/45171451 感谢 P ...
- Python学习笔记三之编程练习:循环、迭代器与函数
Python学习笔记三之编程练习 1. 编程第一步 # 求解斐波纳契数列 #/user/bin/python3#Fibonacci series:斐波那契数列 #两个元素的总和确定了下一个数 a,b= ...
- Python-Level1-day16:异常处理try-exceptraise语句,for迭代原理,深入手写创建迭代器;yield浅出使用生成器
作业 1. 三合一 2. 当天练习独立完成 3. 将员工管理系统分为4个模块employee_system.py 4. (选做)完成2048上下移动函数-- 自定义矩阵转置函数,实现行列颠倒-- ...
- 循环遍历和迭代器遍历如何选择
对于数据的遍历,常见的操作方式有两种:循环遍历和迭代器遍历.有时候,我们容易混淆这两种遍历方式,误以为这两种方式并没有根本就没有什么大的区别. 1.定义 (1)循环遍历:一般而言,我们常见的while ...
- android 半浮层框架,GitHub - Jodragon/AnyLayer: Android稳定高效的浮层创建管理框架
AnyLayer Android稳定高效的浮层创建管理框架. 可取代系统自带Dialog/Popup/BottomSheet等弹窗,可实现单Activity架构的Toast提示,可定制任意样式的Gui ...
- 在循环里创建数据库连接,严重影响数据库性能
在循环里面去操作数据库肯定会慢的,而且还容易碰到新手,在循环里面创建数据库连接,会导致连接数满.一般查询的话,在外层一次性查询出来 然后 在逻辑层去循环组织数据.如果是新增,则可以考虑使用批量插入的方 ...
- 高效便捷地创建单元格数据图表
您能想象折线图.柱状图这些图表被放在一个小小的单元格中的样子吗?Excel 2010的迷你图功能为您提供了这样的便捷体验,让您高效便捷地创建单元格数据图表! 1.打开您想要创建迷你图的Excel工作簿 ...
- 【C语言】利用for循环来创建一个金字塔
先上代码 char ch = 0;ch = getchar();int i = 0;for (i = 0;i < 6;i++){int j = 0;for (j = 0;j < 5 - i ...
最新文章
- 从壹开始前后端分离 40 || 完美基于AOP的接口性能分析
- NIO和Reactor
- wps电脑版_使用好这几个功能,让你手机里的wps变身神器。
- 框架设计:实现数据的按需更新与插入的改进--用数据对比进一步说明
- 剖析Picasso中的内存缓存机制——LruCache
- 使用Java程序通过http post访问ABAP Netweaver服务器
- 线程共享全局变量(.data和.bbs)
- 组件用.vue还是.js_如何使用Vue.js 2.0构建灵活的图像上传器组件
- 从零基础入门Tensorflow2.0 ----九、44.5 keras转换成具体函数
- 百度地图API之根据经纬度查询地址信息(Android)
- Word格式处理控件Aspose.Words for .NET教程——如何删除页脚,但保留页眉完整
- 桌面快捷方式图标不能删除的原因以及处理方法
- 《Hibernate上课笔记》----class4----Hibernate继承关系映射实现详解
- 微信小程序开发基础(02模板与配置)
- Keras深度学习实战(37)——手写文字识别
- 2019上半年软件设计师 下午真题-简答题及免费答案(一)
- 微软开始为厂商提供 SQL Server 2014 OTM
- 家用计算机的发展历史,计算机发展简史
- C/C++制作炫酷烟雾特效
- 被尤雨溪diss的Native CSS Modules是什么
热门文章
- 再谈重载:一个矢量类
- java中static代码块_static怎样在java中修改代码块?
- azure_面向初学者的Azure Data Explorer
- 对警报线程池的警报线程_检测和警报SQL Server代理丢失的作业
- ssas 分区 设置_如何在Analysis Services多维中对SSAS多维数据集进行分区
- Win32环境下动态链接库(DLL)编程原理
- RaspberryPi(一)
- Ethereum 以太坊 交易数据 构建原理
- cocos2d-x 执行在 genymotion上面
- std::list 源代码解析