python的itertools库_python 标准库 itertools

非常简单的介绍itertools,仅仅是为了自己能边历所有的python标准库的手法之一,以下是常用的

itertools中的函数。

import itertools

# 产生一个指定数组的搭配,如44,43,42总共有12种

# 对应的数学意义是排列

for i in itertools.permutations([4,4,3,2,],r=2):

print i

#%%

# 对应的数学意义是组合 'abc' ab,ac,bc

# 还有一个类似的combinations_with_replacement可以额外生成

# aa,bb,cc

for i in itertools.combinations(range(4),2):

print i

#%%

# 产生一个计数的generator,该计数器没有终点,有的话是根据另外一个的数组,

# 形成imap,izip要搭配另一个使用,否则停不下来.参数步长可以指定每次递增的步长

for i , z in itertools.izip(range(10),itertools.count(10,2)):

print i ,z

#%%

# 将多个数组拆开成但个元素,逐个输出

for i in itertools.chain(range(5),range(5,10)):

print i

#%%

# 生成n个相同的序列,但是一旦初始化,也就是其中任意一个

# 迭代器生成之后,序列就固定了,因为每一个迭代器会因此得到

# 相同的值

for i in itertools.tee(range(3),3):

for j in i:

print j

#%%

# imap的函数迭代器,跟map很像,只不过它需要的是

# 临时的计算,不会实现全部计算完

def func(f,num):

return f ** num

for i in itertools.imap(func,range(1,10),range(0,10)):

print i

#%%

# izip的打包迭代器,类似zip,只不过是generator实现而已

for a,b,c in itertools.izip(range(1,5),range(5,9),range(9,13)):

print a,b,c

#%%

# 无限循环的迭代器,可以把一个可迭代的对象无限迭代

cycle = itertools.cycle(range(5))

for i in range(14):

print next(cycle)

#%%

# 将一个序列按照制定的参数,进行分割一共有1个可选参数

# 两个参数的话,直接默认第二个参数为终点

# 多个参数,第一个为起点,第二个为终点,第三个为步长

for i in itertools.islice(range(8),3):

print i

for i in itertools.islice(range(8),1,None,2)

print i

for i in itertools.islice(range(8),1,4,2)

print i

#%%

# 重复生成同一个数字

for i , z in itertools.izip(range(5),itertools.repeat(10)):

print i , z

#%%

# groupby类似sql中的groupby,第一个参数返回group的建,

# 第二个返回组

for k , g in itertools.groupby([1,1,1,1,4,4,4,3,2,222,3,3,3,1,1]):

print k

#%%

# 过滤的迭代器ifilterfalse为相反

def mod(x):

if x % 2 ==0:

return True

else:

return False

for i in itertools.ifilter(mod,range(10)):

print i

#%%

# 返回序列的乘积

for i , z in itertools.product(range(3),repeat=2):

print i ,z

#%%

# 根据selectors选择杜英的元素,返回一个tuple

for i in itertools.compress(range(10),itertools.cycle([0,1])):

print i

#%%

# 遇到第一个达到不满足条件的情况的时候,截取后半段的数组

# 和takewhile相反

for i in itertools.dropwhile(lambda x: x<5, [1,4,6,4,1]):

print i

#%%

# izip_longest类似izip,但是izip是最短的配对,意味着长度为3的数组和

# 长度为5的数组,最后的输出是3个.但是该函数提供填补位,可以

# 指定缺失位置的数值

for i , z in itertools.izip_longest(xrange(10),xrange(5),fillvalue=3):

print i , z

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值