Python内置函数,,map,filter


map,filter, reduce, zip都是针对python中的sequence数据类型的内置方法。

一、map

map(func, *iterables)

先来看看map函数,接收两个参数,第一个是函数,第二个是序列(可迭代对象),map的作用是将序列中的每一个元素传入函数中,并将返回结果加入新列表。

例:

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

def trans(x):    return x.capitalize()print(list(map(trans, [‘adam‘, ‘LISA‘, ‘barT‘])))# [‘Adam‘, ‘Lisa‘, ‘Bart‘]

也可以用匿名函数,同样可以得到相同的结果:

print(list(map(lambda x: x.capitalize(), [‘adam‘, ‘LISA‘, ‘barT‘])))# [‘Adam‘, ‘Lisa‘, ‘Bart‘]  

当然,不用map,使用列表推到式也没问题:

print([x.capitalize() for x in [‘adam‘, ‘LISA‘, ‘barT‘]])# [‘Adam‘, ‘Lisa‘, ‘Bart‘]

二、reduce

reduce(function, sequence)

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

reduce(f, [x1, x2, x3, x4]) <--> f(f(f(x1, x2), x3), x4)

注意:在Python3中reduce需要导入

from functools import reduce

例1:

将一个列表中的每个元素自加3,然后对列表中的元素求和。

最简单的方式,用sum和列表推导式就可以完成:

li = [1, 2, 3, 4, 5, 6]print(sum([x + 3 for x in li]))
# 39

或者:

li = [1, 2, 3, 4, 5, 6]print(reduce(lambda x, y: x + y, [x + 3 for x in li]))# 39  

例2:

Python提供的sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个list并利用reduce()求积。

def prod(li):    return reduce(lambda x, y: x * y, li)print(prod([1,2,3,4]))    # 24

或者:

print(reduce(lambda x, y: x * y, [1, 2, 3, 4]))   # 24

三、zip

zip(iter1 [,iter2 [...]])

zip函数会对每个sequence对象依次取相同索引的值到一个tuple中,然后返回一个由这些tuple组成的列表。tuple的数量由所有sequence中具有最少索引的那个sequence决定,该sequence取值完毕后便不再继续对剩余的sequence取值。  

>>> zip([1,2,3,4],[2,3,4,5])[(1, 2), (2, 3), (3, 4), (4, 5)]>>> zip([1,2,3,4], (2,3,4,5,6,7))[(1, 2), (2, 3), (3, 4), (4, 5)]>>> zip([1,2,3,4], [[2,3,4],[2,3]])[(1, [2, 3, 4]), (2, [2, 3])]  

四、filter  

filter(function or None, iterable)

filter的工作原理是使用第一个参数对象(function或者None)来对第二参数对象iterable进行运算,并根据运算结果的布尔值来过滤iterable中的元素。

对function返回值的布尔运算,如果为True,则将当前元素存储到string, tuple或者list中并最终返回对应类型的对象;如果为False,则将当前元素过滤掉,如果function没有返回值,则视为返回None,因此所有元素都会被过滤掉。如果第一个参数不是function而是None,则返回iterable中所有为True的元素。

>>> filter(lambda d: d != ‘a‘, ‘abcd‘)  # 过滤掉了字母‘a‘。‘bcd‘

  

-----------------------------------------------------------------------------------------------------------

Python内置函数

评论关闭