第三章:算法-itertools:迭代器函数-转换输入

Python map()与starmap()详解
本文详细解析了Python内置函数map()和starmap()的使用方法及区别,通过实例展示了如何利用这些函数处理多个迭代器的数据,包括基本的倍增操作、两数相乘以及使用lambda表达式的高级应用。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值