原文地址:https://my.oschina.net/zyzzy/blog/115096
1.对可迭代函数'iterable'中的每一个元素应用‘function’方法,将结果作为list返回
>>> def add(x):
... return x+100
...
>>> hh=[11,22,33]
>>> map(add,hh)
[111, 122, 133]
>>>
就像文档中说的:对hh中的元素做了add,返回了结果的list.
2.如果给出了额外的可迭代参数,则对每个可迭代参数中的元素‘同列’的应用‘function’。
>>> def abc(a,b,c):
... return a*100+b*10+c
...
>>> list1=[11,22,33]
>>> list2=[44,55,66]
>>> list3=[77,88,99]
>>> map(abc,list1,list2,list3)
[1617, 2838, 4059]
看到同列的效果了吧!在每个list中,取出了下标相同的元素,执行了abc()
3.如果'function'给出的是‘None’,将结果都存在一个列表里面
>>> list1=[11,22,33]
>>> map(None,list1)
[11, 22, 33]
>>> list1=[1,2,3]
>>> list2=[4,5,6]
>>> list3=[7,8,9]
>>> map(None,list1,list2,list3)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
stackoverflow上有人说可以这样理解map():
map(f,iterable)
基本等于
[f(x) for x in iterable]
试一下看看结果:
>>> def add(x):
... return x+100
...
>>> list1=[11,22,33]
>>> map(add,list1)
[111, 122, 133]
>>> [add(i) for i in list1]
[111, 122, 133]
结果确实是一样的,但是如果真这样想就不对了
再看一个例子:
>>> def add(a,b,c):
... return a*100+b*10+c
...
>>> list1=[1,2,3]
>>> list2=[4,5,6]
>>> list3=[7,8,9]
>>> map(add,list1,list2,list3)
[147, 258, 369]
那么如果按照[f(x) for x in iterable]来写呢?
>>> [add(a,b,c) for a in list1 for b in list2 for c in list3]
[147, 148, 149, 157, 158, 159, 167, 168, 169, 247, 248, 249, 257, 258, 259, 267, 268, 269, 347, 348, 349, 357, 358, 359, 367, 368, 369]