map函数
map()函数是Python中的一个内置函数,它的功能是:将指定的函数,依次作用于可迭代对象的每个元素,并返回一个迭代器对象。这个可迭代对象,可以是一个也可以是多个。
map() 语法
map(function,iterable,...)
参数
function-我们指定的函数(或数据类型),可以是python内置的,也可以是自定义的。
iterable-可迭代的对象,例如列表,元组,字符串等。
返回值
返回一个可迭代对象,一般搭配list()使用,输出列表
def double(x):
return 2 * x
numbers = [1, 2, 3, 4, 5]
# 将 函数 double 依次作用于 numbers 列表的每个元素,
doubled_numbers = map(double, numbers)
print(doubled_numbers) # 返回迭代器 <map object at 0x00000196BC127670>
print(list(doubled_numbers)) # 返回迭代器,搭配list输出 [2, 4, 6, 8, 10]
--------------------------------
list1 = [2, 4, 6, 8, 10]
def double(x):
return x ** 2
# 将 函数double 分别作用于 list1, duble 是函数名
double_num = map(double, list1)
print(double_num) # <map object at 0x0000020393910070>
print(list(double_num)) # [4, 16, 36, 64, 100]
for i in map(double, list1): # 遍历 迭代器
print(i, end=' ') # 4 16 36 64 100
-------------------------------------
# 两个列表按对应下标进行相加
list1 = [1, 3, 5, 7]
list2 = [2, 4, 6, 8]
# 定义函数,因为要传入的两个可迭代对象进行运算,所以必须两个形参
def add_num(x, y):
return x + y
# 函数map()对 list1 和 list2 进行计算
list3 = list(map(add_num, list1, list2))
print(list3) # [3, 7, 11, 15]
reduce函数
reduce函数原本在python2中也是个内置函数,不过在python3中被移到functools模块中。先要使用 import functools 导入。
功能:
reduce函数先从列表(或序列)中取出2个元素执行指定函数,并将输出结果与第3个元素传入函数,输出结果再与第4个元素传入函数,…,以此类推,直到列表每个元素都取完。
语法:
reduce(fn函数,list)
reduce(func,lst)
# 其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累计计真
reduce() 函数从左至右依次累计使用列表中的元素调用 fn 函数,从而将列表累积生成单个值
# 需求: 使用for循环计算列表的累加值
list1 = [1, 2, 3, 4]
x = 0
for i in list1:
x = x + i
print(x) # 10
————————————————————————————————————————————
# 使用reduce()函数完成累加
list1 = [1, 2, 3, 4]
from functools import reduce # 调入模快
def sum(a, b):
return a + b
# reduce() 函数从左至右依次累计使用列表中的元素调用 sum 函数,从而将列表累+生成单个值。
total = reduce(sum, list1)
print(total) # 10
_____________________________________________
list1 = [1, 2, 3, 4]
from functools import reduce # 调入模快
def sum(a, b):
return a * b
# reduce() 函数从左至右依次累计使用列表中的元素调用 sum 函数,从而将列表累积生成单个值。
total = reduce(sum, list1)
print(total) # 24
---------------------------------------
# 调用reduce函数的另一个方法:
list1 = [1, 2, 3, 4]
def fun1(a, b):
return a + b
import functools # 导入 functools
result = functools.reduce(fun1, list1) # 调用 reduce 函数
print(result) # 10
# 使用 lambda 函数
result2 = functools.reduce(lambda x, y: x + y, list1)
print(result2) # 10
filter()函数
filter() 属于Python中的内置函数,用于过滤序列,过滤掉不符合条件的元素。传入一个可迭代对象并返回一个新的迭代器对象,如果要转换为列表,可以使用list()来转换。
语法:
filter(function,iterable)
function -- 判断作用的函数
iterable -- 可迭代对象
list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ]
def func(x): # 定义函数作用,取偶数
return x % 2 == 0
# 函数取偶数,分别作用于可迭代数据(list1), 过滤掉不满足的。
result = filter(func, list1)
# <filter object at 0x0000020B06BC5970> 内存地址,可迭代器
print(result)
print(list(result)) # [0, 2, 4, 6, 8] list转化为列表
# 使用 filter + lambda 函数取 奇数
result2 = filter(lambda x: x % 2 == 1, list1)
print(list(result2)) # [1, 3, 5, 7, 9]
总结:
map() 分别将函数作用到列表对像的每个值,返回迭代器,列表list输出结果
reduce() 将列表中每个对像,累计到函数(必须两个形参)结果中,返回最终一个值。先要导入import functools
filter() 分别将判断作用的函数作用到列表对像的每个值,过滤掉不符合判断的数据,返回迭代器,列表list输出结果