python map()函数,reduce()函数,filter()函数 小记

参考教材python程序设计实例教程 董付国版 机械工业出版社

map()函数

内置函数map是()是把一个函数func依次映射到序列的每个元素上,并返回一个可迭代的map对象作为结果,如需查看结果可使用tuple,list等进行强制转换。map对象中每个元素都是原序列中元素元素经过函数 func 处理后的结果, map() 函数不对原序列做任何更改。

>>> nums = list(map(int,input().split()))    # 算法竞赛中最常见的赋值方法
1 2 3 4 5
>>> nums
[1, 2, 3, 4, 5]
>>> def func(n):
	return n * 10
>>> list(map(func,nums))  # 也能自定义一个函数func让nums里面每个元素分别调用
[10, 20, 30, 40, 50]
>>> list(map(lambda x:x+2,nums))   # 也可使用lambda表达式
[3, 4, 5, 6, 7]
>>> list(map(lambda x,y:2*x+y,nums,range(5)))   # 同时支持多个等长的序列或迭代器对象一并计算
[2, 5, 8, 11, 14]

reduce()函数

标准库 functools 中的函数reduce() 可以将一个接收两个参数函数迭代累积的形式从左到右依次作用到一个序列或迭代器对象的所有元素上,并且允许指定一个初始值。例如,

>>> nums
[1, 2, 3, 4, 5]
>>> from functools import reduce
>>> reduce(lambda x,y:x+y,nums)
15

计算过程为((((1+2)+3)+4)+5),第一次计算时x为1而 y为2,第二次计算时x的值 为(1+2)而y的值为3,第三次计算时x的值为((1+2)+3)而y 的值为4,以此类推,最终完 成计算并返回((((1+2)+3)+4)+5)的值。

filter()函数

内置函数filter()是将一个单参数函数作用到一个序列上,返回该序列中使得该函数返回值为True的那些元素组成的filter对象,如果指定函数为None,则返回序列中等价于 True的元素。在使用时,可以把 filter 对象转换为列表、元组、集合,也可以直接使用for循环遍历其中的元素。

>>> nums = list(range(5))
>>> nums
[0, 1, 2, 3, 4]
>>> def func(n):
	return n % 2 == 0
>>> list(filter(func,nums))  # 如果想查看结果需要使用list,tuple等进行转换,否则只会显示filter对象的地址
>>> filter(func,nums)
<filter object at 0x000001D1E6A1C910>
[0, 2, 4]
>>> list(filter(lambda x:x%2==0,nums))  # 对于简单的函数可以使用lambda表达式代替
[0, 2, 4]
>>> for i in filter(lambda x:x%2==0,nums):  # 亦可使用for遍历其中元素
	print(i,end=" ")  
0 2 4 
>>> list(filter(None,nums))   # 如果指定函数为None时,返回序列元素自身元素是True的元素,即非0元素。
[1, 2, 3, 4]

猜你喜欢

转载自blog.csdn.net/lishuaigell/article/details/124168814