Python 入门教程
0.为什么选择 Python 入门?
1.安装
2.print
3.IDE
4.输入
5.变量
6.bool
7.if
8.while
9.random
10.变量2
11.逻辑判断
12.for循环
13.字符串
14.字符串格式化
15.循环的嵌套
16.字符串格式化2
17.类型转换
18.bool类型转换
19.函数
20.命令行常用命令
21.函数的参数
22.函数应用示例
23.if, elif, else
24.if的嵌套
25.初探list
26.操作list
27.list切片
28.字符串的分割
29.连接list
30.字符串的索引和切片
31.读文件
32.写文件
33.处理文件中的数据
34.break
35.continue
36.异常处理
37.字典
38.模块
39.用文件保存游戏(1)
40.用文件保存游戏(2)
41.用文件保存游戏(3)
42.函数的默认参数
43.查天气(1)
44.查天气(2)
45.查天气(3)
46.面向对象(1)
47.面向对象(2)
48.面向对象(3)
49.面向对象(4)
50.and-or技巧
51.元组
52.数学运算
53.真值表
54.正则表达式(1)
55.正则表达式(2)
56.正则表达式(3)
57.正则表达式(4)
58.正则表达式(5)
59.随机数
60.计时
61.调试程序
62.python 2 到 3 的新手坑
63.python shell
64.列表解析
65.函数的参数传递(1)
66.函数的参数传递(2)
67.函数的参数传递(3)
68.lambda 表达式
69.变量的作用域
70.map 函数
71.reduce 函数
72.多线程
【Python 第70课】map 函数
来看两个问题:
1. 假设有一个数列,如何把其中每一个元素都翻倍?
2. 假设有两个数列,如何求和?
第一个问题,普通程序员大概会这么写:
lst_1 = [1,2,3,4,5,6]
lst_2 = []
for item in lst_1:
lst_2.append(item * 2)
print (lst_2)
Python 程序员大概会这么写:
lst_1 = [1,2,3,4,5,6]
lst_2 = [i * 2 for i in lst_1]
print (lst_2)
这是我在《【Python 第65课】列表综合》里说到的方法。
今天来说另一种 Python 程序员常用的写法 -- map:
lst_1 = [1,2,3,4,5,6]
def double_func(x):
return x * 2
lst_2 = map(double_func, lst_1)
print(list(lst_2))
(注:在py3里必须将lst_2转换成list对象后输出)
map 是 Python 自带的内置函数,它的作用是把一个函数应用在一个(或多个)序列上,把列表中的每一项作为函数输入进行计算,再把计算的结果以列表的形式返回。
map 的第一个参数是一个函数,之后的参数是序列,可以是 list、tuple。
所以刚刚那个问题也可以写成:
lst_1 = (1,2,3,4,5,6)
lst_2 = map(lambda x: x * 2, lst_1)
print(list(lst_2))
这里原数据改为了元组,函数用 lambda 表达式替代。可参考《【Python 第69课】lambda 表达式》。
map 中的函数可以对多个序列进行操作。最开始提出的第二个问题,除了通常的 for 循环写法,如果用列表综合的方法比较难实现,但用 map 就比较方便:
lst_1 = [1,2,3,4,5,6]
lst_2 = [1,3,5,7,9,11]
lst_3 = map(lambda x, y: x + y, lst_1, lst_2)
print(list(lst_3))
map 中的函数会从对应的列表中依次取出元素,作为参数使用,同样将结果以列表的形式返回。所以要注意的是,函数的参数个数要与 map 中提供的序列组数相同,即函数有几个参数,就得有几组数据。
对于每组数据中的元素个数,如果有某组数据少于其他组,map 会以 None 来补全这组参数。
来源:Crossin的编程教室