3.2.2 转换输入
内置的map()函数返回一个迭代器,它对输入迭代器中的值调用一个函数并返回结果。任何输入迭代器中的元素全部消费时,map()函数都会停止。
def times_two(x):
return 2 * x
def multiply(x,y):
return (x,y,x * y)
print('Doubles:')
for i in map(times_two,range(5)):
print(i)
print('\nMultiples:')
r1 = range(5)
r2 = range(5,10)
for i in map(multiply,r1,r2):
print('{:d} * {:d} = {:d}'.format(*i))
print('\nStopping:')
r1 = range(5)
r2 = range(2)
for i in map(multiply,r1,r2):
print(i)
在第一个例子中,lambda函数将输入值乘以2。在第二个例子中,lambda函数将两个参数相乘(这两个参数分别来自不同的迭代器),返回一个元组,其中包含原参数和计算得到的值。第三个例子会在生成两个元组后停止,因为第二个区间已经处理完。
运行结果:
Doubles:
0
2
4
6
8
Multiples:
0 * 5 = 0
1 * 6 = 6
2 * 7 = 14
3 * 8 = 24
4 * 9 = 36
Stopping:
(0, 0, 0)
(1, 1, 1)
starmap()函数类似于map(),不过并不是由多个迭代器构造一个元组,它使用*语法分解一个迭代器中的元素作为映射函数的参数。
from itertools import *
values = [(0,5),(1,6),(2,7),(3,8),(4,9)]
for i in starmap(lambda x,y:(x,y,x * y),values):
print('{} * {} = {}'.format(*i))
map()的映射函数名为f(i1,i2),而传入starmap()的映射函数名为f(*i).
运行结果:
0 * 5 = 0
1 * 6 = 6
2 * 7 = 14
3 * 8 = 24
4 * 9 = 36