码迷,mamicode.com
首页 > 编程语言 > 详细

Python内置函数

时间:2017-03-30 23:25:43      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:seq   ring   api   接受   输入   imp   pre   lis   isa   

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内置函数

标签:seq   ring   api   接受   输入   imp   pre   lis   isa   

原文地址:http://www.cnblogs.com/pyramid1001/p/6648664.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!