python-itertools迭代器函数(一)

1.迭代器函数
itertools包括一组用于处理序列数据集的函数。其目的是要快速处理,以及要高效的使用内存,而且可以联结在一起表述更为f复杂的迭代算法。
2.合并和分解迭代器
from itertools import *
# 合并
for i in chain([1,2,3],['a','b','c']):
	print(i,end=' ')
	
#chain.from_iterable 采用懒方式计算
def make_iterables_to_chain():
	yield [1,2,3]
	yield ['a','b','c']
for i in chain.from_iterable(make_iterables_to_chain()):
	print(i,end=" ")
	
# zip() 返回一个迭代器,会多个迭代器的元素结合到一个元组中
for i in zip([1,2,3],['a','b','c']):
	print(i)

# 较短的迭代器为准
r1 = range(3)
r2 = range(2)
print(list(zip(r1,r2))) # [(0,0),(1,1)] 
# zip_longest 以较长的迭代器 为准 缺省的 值为 None
print(list(zip_longest(r1,r2)))

# islice() 函数返回一个迭代器,它按索引从输入迭代器返回所选择的元素
for i in islice(range(100),5):
	print(i,end=" ") # 0 1 2 3 4
for i in islice(range(100),5,10):
	print(i,end=" ") # 5 6 7 8 9
for i in islice(range(100),0,100,10):
	print(i,end=" ")

# tee() 函数根据一个原输入迭代器返回多个独立的迭代器(默认2 个)
r = islice(count(),5)
i1,i2 = tee(r)
print('i1',list(i1))
print('i2',list(i2))
# tee() 创建的新的迭代器会 共享其输入迭代器,所以创建了新的迭代器后,不应再使用原迭代器
for i in r:
	print(i,end=' ')
	if i > 1:
		break
print('i1',list(i1)) # [3,4]
print('i2',list(i2)) # [3,4]
# 原输入的一些值已经消费,新迭代器 不会再生成这些值
3.转换输入map
def times_two(x):
	return 2 * x
def multiply(x,y):
	return (x,y,x*y)
for i in map(times_two,range(5)): # 映射
	print(i)

r1 = range(5)
r2 = range(5,10)
for i in map(multiply,r1,r2):
	print("{:d} * {:d} = {:d}",format(*i)) # *i 表示元素分解

# starmap 类似于 map 不过并不是 由多个迭代器构成一个元组,它使用 *语法 分解一个迭代器中的元素作为映射函数的参数
values = [(0,5),(1,6),(2,7)]
for i in starmap(lambda x,y:(x,y,x * y),values):
	print("{:d} * {:d} = {:d}".format(*i))
	
4.count
# count 函数返回一个迭代器,该迭代器能够无限的生成连续的整数,第一个数可以作为参数传入(默认为0)
from itertools import *
for i in zip(count(1),['a','b','c']):
	print(i)

# count() 的开始位置 和步长 可以指定
import fractions
start = fractions.Fraction(1,3)
step =  fractions.Fraction(1,3)
for i in zip(count(start,step),['a','b','c']):
	print("{}:{}".format(*i))

#cycle() 返回一个迭代器 无限重复的给定参数内容
for i in zip(range(7),cycle(['a','b','c'])):
	print(i)
# repeat() 函数返回一个迭代器 每次产生相同的值
for i in repeat(":)",10):
	print(i)

# 迭代器组合使用
for i,s in zip(count(),repeat("hello",5)):
	print(i,s)
'''
0 hello
1 hello
2 hello
3 hello
4 hello
'''
for i in map(lambda x,y:(x,y,x*y),repeat(2),range(5)):
	print("{:d} * {:d} = {:d}".format(*i))
'''
2 * 0 = 0
2 * 1 = 1
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值