对于map()它的原型是:map(function,sequence),就是对序列sequence中每个元素都执行函数function操作。
比如之前的a,b,c = map(int,raw_input().split()),意思就是说把输入的a,b,c转化为整数。再比如:
1
2
3
|
a = [ '1' , '2' , '3' , '4' ]
print map ( list ,a)
print map ( int ,a)
|
第一个map是把列表a中每个元素转化为列表,第二个map是把a中每个元素转化为整数。
而对于zip(),原型是zip(*list),list是一个列表,zip(*list)返回的是一个元组,比如:
1
2
3
|
list = [[ 1 , 2 , 3 ],[ 4 , 5 , 6 ],[ 7 , 8 , 9 ]]
t = zip ( * list )
print t
|
输出:[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
1
2
3
4
|
x = [ 1 , 2 , 3 , 4 , 5 ]
y = [ 6 , 7 , 8 , 9 , 10 ]
a = zip (x,y)
print a
|
输出:[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
下面是一些补充:
1
2
3
4
5
6
|
[python]
>>> list = [[ 0 , 1 , 2 ],[ 3 , 1 , 4 ]]
>>> [ sum (x) for x in list ]
[ 3 , 8 ]
>>> map ( sum , list )
[ 3 , 8 ]
|
如果要得到每列之和,需要用zip(*list)先unzip list,得到一个元组list,其中第i个元组包含了每行的第i个元素:
1
2
3
4
5
6
7
8
|
[python]
>>> list = [[ 0 , 1 , 2 ],[ 3 , 1 , 4 ]]
>>> zip ( * list )
[( 0 , 3 ), ( 1 , 1 ), ( 2 , 4 )]
>>> [ sum (x) for x in zip ( * list )]
[ 3 , 2 , 6 ]
>>> map ( sum , zip ( * list ))
[ 3 , 2 , 6 ]
|
下面的例子是关于zip和unzip(其实是zip和*一起用)如何work的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[python]
>>> x = [ 1 , 2 , 3 ]
>>> y = [ 4 , 5 , 6 ]
>>> zipped = zip (x,y)
>>> zipped
[( 1 , 4 ), ( 2 , 5 ), ( 3 , 6 )]
>>> x2,y2 = zip ( * zipped)
>>> x2
( 1 , 2 , 3 )
>>> y2
( 4 , 5 , 6 )
>>> x3,y3 = map ( list , zip ( * zipped))
>>> x3
[ 1 , 2 , 3 ]
>>> y3
[ 4 , 5 , 6 ]
|