没有合适的资源?快使用搜索试试~ 我知道了~
这货很强大, 必须掌握 文档 链接 http://docs.python.org/2/library/itertools.html pymotw 链接 http://pymotw.com/2/itertools/ 基本是基于文档的翻译和补充,相当于翻译了 itertools用于高效循环的迭代函数集合 组成 总体,整体了解 无限迭代器 复制代码 代码如下: 迭代器 参数 结果 例子 count() start, [step] start, start+step
资源推荐
资源详情
资源评论
Python itertools模块详解模块详解
这货很强大, 必须掌握
文档 链接 http://docs.python.org/2/library/itertools.html
pymotw 链接 http://pymotw.com/2/itertools/
基本是基于文档的翻译和补充,相当于翻译了
itertools用于高效循环的迭代函数集合
组成组成
总体,整体了解
无限迭代器
复制代码 代码如下:
迭代器 参数 结果 例子
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 C D …
repeat() elem [,n] elem, elem, elem, … endlessly or up to n times repeat(10, 3) –> 10 10 10
处理输入序列迭代器
复制代码 代码如下:
迭代器 参数 结果 例子
chain() p, q, … p0, p1, … plast, q0, q1, … chain(‘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], starting when pred fails dropwhile(lambda x: x<5, [1,4,6,4,1]) –> 6 4 1
groupby() iterable[, keyfunc] sub-iterators grouped by value of keyfunc(v)
ifilter() pred, seq elements of seq where pred(elem) is True ifilter(lambda x: x%2, range(10)) –> 1 3 5 7 9
ifilterfalse() pred, seq elements of seq where pred(elem) is False ifilterfalse(lambda x: x%2, range(10)) –> 0 2 4 6 8
islice() seq, [start,] stop [, step] elements from seq[start:stop:step] islice(‘ABCDEFG’, 2, None) –> C D E F G
imap() func, p, q, … func(p0, q0), func(p1, q1), … imap(pow, (2,3,10), (5,2,3)) –> 32 9 1000
starmap() func, seq func(*seq[0]), func(*seq[1]), … starmap(pow, [(2,5), (3,2), (10,3)]) –> 32 9 1000
tee() it, n it1, it2 , … itn splits one iterator into n
takewhile() pred, seq seq[0], seq[1], until pred fails takewhile(lambda x: x<5, [1,4,6,4,1]) –> 1 4
izip() p, q, … (p[0], q[0]), (p[1], q[1]), … izip(‘ABCD’, ‘xy’) –> Ax By
izip_longest() p, q, … (p[0], q[0]), (p[1], q[1]), … izip_longest(‘ABCD’, ‘xy’, fillvalue=’-‘) –> Ax By C- D-
组合生成器
复制代码 代码如下:
迭代器 参数 结果
product() p, q, … [repeat=1] cartesian product, equivalent to a nested for-loop
permutations() p[, r] r-length tuples, all possible orderings, no repeated elements
combinations() p, r r-length tuples, in sorted order, no repeated elements
combinations_with_replacement() p, r r-length tuples, in sorted order, with repeated elements
product(‘ABCD’, repeat=2) AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
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.count(start=0, step=1)
创建一个迭代器,生成从n开始的连续整数,如果忽略n,则从0开始计算(注意:此迭代器不支持长整数)
如果超出了sys.maxint,计数器将溢出并继续从-sys.maxint-1开始计算。
定义
复制代码 代码如下:
def count(start=0, step=1):
# count(10) –> 10 11 12 13 14 …
# count(2.5, 0.5) -> 2.5 3.0 3.5 …
n = start
while True:
yield n
n += step
等同于(start + step * i for i in count())
使用
复制代码 代码如下:
from itertools import *
for i in izip(count(1), [‘a’, ‘b’, ‘c’]):
print i
(1, ‘a’)
(2, ‘b’)
(3, ‘c’)
itertools.repeat(object[, times])
创建一个迭代器,重复生成object,times(如果已提供)指定重复计数,如果未提供times,将无止尽返回该对象。
定义
复制代码 代码如下:
def repeat(object, times=None):
# repeat(10, 3) –> 10 10 10
if times is None:
while True:
yield object
else:
for i in xrange(times):
yield object
使用
复制代码 代码如下:
from itertools import *
for i in repeat(‘over-and-over’, 5):
print i
over-and-over
over-and-over
over-and-over
over-and-over
over-and-over
第二部分
itertools.chain(*iterables)
将多个迭代器作为参数, 但只返回单个迭代器, 它产生所有参数迭代器的内容, 就好像他们是来自于一个单一的序列.
复制代码 代码如下:
def chain(*iterables):
# chain(‘ABC’, ‘DEF’) –> A B C D E F
for it in iterables:
for element in it:
yield element
使用
复制代码 代码如下:
from itertools import *
for i in chain([1, 2, 3], [‘a’, ‘b’, ‘c’]):
print i
1
2
3
a
b
c
from itertools import chain, imap
def flatmap(f, items):
return chain.from_iterable(imap(f, items))
>>> list(flatmap(os.listdir, dirs))
>>> [‘settings.py’, ‘wsgi.py’, ‘templates’, ‘app.py’,
‘templates’, ‘index.html, ‘config.json’]
itertools.compress(data, selectors)
提供一个选择列表,对原始数据进行筛选
复制代码 代码如下:
def compress(data, selectors):
# compress(‘ABCDEF’, [1,0,1,0,1,1]) –> A C E F
return (d for d, s in izip(data, selectors) if s)
itertools.dropwhile(predicate, iterable)
创建一个迭代器,只要函数predicate(item)为True,就丢弃iterable中的项,如果predicate返回False,就会生成iterable中的项
和所有后续项。
即:在条件为false之后的第一次, 返回迭代器中剩下来的项.
复制代码 代码如下:
def dropwhile(predicate, iterable):
# dropwhile(lambda x: x<5, [1,4,6,4,1]) –> 6 4 1
iterable = iter(iterable)
for x in iterable:
if not predicate(x):
yield x
break
for x in iterable:
yield x
使用
复制代码 代码如下:
from itertools import *
def should_drop(x):
print ‘Testing:’, x
return (x<1)
for i in dropwhile(should_drop, [ -1, 0, 1, 2, 3, 4, 1, -2 ]):
print ‘Yielding:’, i
Testing: -1
Testing: 0
Testing: 1
Yielding: 1
Yielding: 2
Yielding: 3
Yielding: 4
Yielding: 1
Yielding: -2
itertools.groupby(iterable[, key])
返回一个产生按照key进行分组后的值集合的迭代器.
如果iterable在多次连续迭代中生成了同一项,则会定义一个组,如果将此函数应用一个分类列表,那么分组将定义该列表中
的所有唯一项,key(如果已提供)是一个函数,应用于每一项,如果此函数存在返回值,该值将用于后续项而不是该项本身
进行比较,此函数返回的迭代器生成元素(key, group),其中key是分组的键值,group是迭代器,生成组成该组的所有项。
即:按照keyfunc函数对序列每个元素执行后的结果分组(每个分组是一个迭代器), 返回这些分组的迭代器
等价于
复制代码 代码如下:
class groupby(object):
# [k for k, g in groupby(‘AAAABBBCCDAABBB’)] –> A B C D A B
# [list(g) for k, g in groupby(‘AAAABBBCCD’)] –> AAAA BBB CC D
def __init__(self, iterable, key=None):
if key is None:
key = lambda x: x
self.keyfunc = key
self.it = iter(iterable)
self.tgtkey = self.currkey = self.currvalue = object()
def __iter__(self):
return self
def next(self):
while self.currkey == self.tgtkey:
self.currvalue = next(self.it) # Exit on StopIteration
self.currkey = self.keyfunc(self.currvalue)
self.tgtkey = self.currkey
剩余13页未读,继续阅读
资源评论
weixin_38663516
- 粉丝: 6
- 资源: 932
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2022年各城市PM2.5, PM10, SO2, NO2等环境空气质量数据
- Golang:通过Gin框架+Redis+责任链,实现一个简单的钉钉机器人,进行消息处理 ps:多应用版
- 2021年各城市PM2.5, PM10, SO2, NO2等环境空气质量数据
- CORRUPT.navicat150-premium-cs-x64.exe
- centos7 ssh 升级至 9.6p1
- DriverMax Pro .exe
- PHP端通过modbus协议跟第三方设备进行数据通信
- navicat安装包亲测可用
- 算法部署-使用OpenVINO部署MobileStyleGAN轻量化高保真图像合成算法-项目源码-优质项目实战.zip
- 基于java实现远程采集华为逆变器使用modbus tcp协议进行通讯的设备数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功