Map
>>> def f(x):
return x**2 x**2等价于x*x
>>> L = map(f,[1,2,3,4,5,6,7,8,9])
>>> list(L) L为迭代器,不是列表
[1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> L
<map object at 0x105ccd4a8>
map( )函数接收两个参数,一个是函数,一个是iterable(可迭代对象);返回iterator(迭代器)。
迭代器仅在迭代至某个元素时才计算该元素(上边用list(L)来触发迭代计算),这个特点被称为延迟计算或惰性求值(Lazy evaluation)。
为什么list、dict、str等数据类型不是Iterator?
因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
用循环实现上面的迭代:
>>> L = [] >>> for i in [1,2,3,4,5,6,7,8,9]: L.append(i*i) >>> L [1, 4, 9, 16, 25, 36, 49, 64, 81]
把列表里所有元素转换成字符串类型:
>>> list(map(str,[1,2,3,4,5])) ['1', '2', '3', '4', '5']
或者先把map得到的iterator赋给变量再进行list化:
>>> L = map(str,[1,2,3,4,5]) >>> list(L) ['1', '2', '3', '4', '5']
map所有字符串首字母大写、其余小写:
>>> def normalize(s):
return s[0].upper()+s[1:].lower() 首位索引0 从第二位到最后一位索引1: 不写默认到最后
>>> L = ['adam','LISA','LR']
>>> list(map(normalize,L)) map得到的结果为iterator需要list化
['Adam', 'Lisa', 'Lr']
浙公网安备 33010602011771号