python map()函数

原文地址: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]

结果却和上面的不一样了,因为map()只做了列上面的运算,就是对不同的list的同列进行操作(从上面的第二个例子就看出了)

posted @ 2017-08-07 18:58  xushukui  阅读(218)  评论(0编辑  收藏  举报