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)。

 

为什么listdictstr等数据类型不是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']
posted @ 2017-08-04 16:45  sniperlr  阅读(100)  评论(0)    收藏  举报