廖雪峰的Python-map/reduce

来源:互联网 发布:日本端口 编辑:程序博客网 时间:2024/06/04 18:40

1、map

  map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

  例子:

>>> def f(x):...     return x*x...>>> map(f,[1,2,3,4,5,6,7,8,9])[1, 4, 9, 16, 25, 36, 49, 64, 81]

 map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,比如,把这个list所有数字转为字符串:

>>>map(str,[1,2,3,4,5,6,7,8,9])['1', '2', '3', '4', '5', '6', '7', '8', '9']

  (注:字符串是以''或""括起来的任意文本。String类是不可变的,对String类的任何改变,都是返回一个新的String类对象.)

2、reduce

  reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

  reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

  例子1:

>>> def add(x,y):...     return x+y...>>> reduce(add,[1,3,5,7,9])25
  例子2:把序列[1, 3, 5, 7, 9]变换成整数13579

>>> def fn(x, y):...     return x * 10 + y...>>> reduce(fn, [1, 3, 5, 7, 9])13579
  例子3:把‘13579’(str)转换为 13579(int)

>>> def fn(x, y):...     return x * 10 + y...>>> def char2num(s):...     return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]...>>> reduce(fn, map(char2num, '13579'))13579
  (注:int 为 表示一种整型数据类型; char 为 可容纳单个字符的数据类型。)

3、习题

  3.1  利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']。


分析: 因为字符串 str 也是一个序列,对于本题就相当于把首字符全部变为大写,其他的均为小写。 第一步,把字符串分为首项和其他项。第二步,用函数把首项大写,其他项小写即可。

知识:  ①切片:将 ‘michael’切片。

>>> s = 'michael'>>> s[0]'m'>>> s[1:]'ichael'

注 关于切片详细内容见:切片 

②函数:.upper() & lower() ; 在字符串上执行.upper()方法将所有字符转换为大写,而lower()方法将所有字符转换为小写。

>>> s = 'michael'>>> def f(s):...     return s[0].upper()...>>> f(s)'M'
(注:函数不能直接使用需要先定义函数。)

答案

>>> L = ['adam', 'LISA', 'barT']>>> def f(s):...     return s[0].upper() + s[:].lower()...>>> map(f,L)['Aadam', 'Llisa', 'Bbart']

疑问:怎么才能在submit3中运行Python项目,用submit3写的.py项目运行后丝毫没有反应?

答案:只有运行没有输出选项。


直接ctrl+b 直接运行即可。

2017年6月4日19:58:05

原创粉丝点击