Python中的内置高阶函数

本文深入探讨Python中的高阶函数,包括map(), reduce(), lambda, filter()等,通过实例讲解如何利用这些函数进行高效的数据处理和算法实现,适合Python初学者及进阶者阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.高阶函数

  • 实参是一个函数
  • 函数的返回值是一个函数

2.map() 映射函数

map函数一次性接收两个参数,一个函数,一个为序列;作用是将接收的函数作用到所接收序列中的每一个元素

# 对一个序列[-1,3,-4,-5]的每一个元素求绝对值
import random
print(list(map(abs,[-1,3,-4,-5])))

# 对每个元素求阶乘
def f(x):
    """对x求阶乘"""
    res = 1
    for i in range(1,x+1):
        res = res * i
    return res

li = [random.randint(2,7) for i in range(10)]
print(li)

print(list(map(f,li)))

3. reduce() 迭代函数

reduce()同样是接收两个参数,一个为函数,一个为序列;作用是把这个函数作用在序列上;
但函数每次从序列上接收两个元素,进行操作并将结果再返回给序列,这样依次迭代累积计算,最终得到一个结果

需要注意的是:reduce() 在python2中是内置函数,可以直接使用;但在python3中,需要导入相应模块才能使用
from funtools import reduce

"""
reduce():把一个函数作用在一个序列上,这个函数必须接收两个参数
reduce把结果继续和序列的下一个元素做累积计算

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

python2中:reduce是内置函数
python3:from functools import reduce
"""
from functools import reduce

def multi(x,y):
    return x*y
print(reduce(multi,range(1,10)))

def add(x,y):
    return  x+y
print(reduce(add,range(1,101)))

4. lambda 匿名函数

简单的函数定义可以省去格式上的繁琐,定义为匿名函数;
函数中冒号之前的为形参,冒号之后的为返回值

from functools import reduce

def add(x,y):
    return x+y

print(reduce(add,range(10)))
print(reduce(lambda x,y:x+y,range(10)))

# def mypow(x):
#     return x **2
print(list(map(lambda x:x**2,range(5))))

# def isood(num):
#     return num%2 ==0
# print(isood(11))

print(list(filter(lambda x:x%2==0,range(100))))

5. filter()过滤函数

与map() 函数类似;filter() 接收函数和序列两个参数,将函数作用于序列中的每个元素,但返回值为bool值,True或者False;
根据其返回值决定保留还是舍弃该元素
,从而达到过滤的效果

def isodd(num):
    if num % 2 ==0:
        return True
    else:
        return False
print(list(filter(isodd,range(100)))) 

6.练习

例:将一个字符串转换成整型’1234’–>1234

from functools import reduce
def str2int(s):
    def char2int(ch):
        c = {str(x):x for x in range(10)}
        #print(c)
        return c[ch]
    def fun(n1,n2):
        return n1 * 10 + n2
    return reduce(fun,map(char2int,s))

num = str2int('12343')
print(type(num),num)

例2:有一个整数列表(10个元素),要求调整元素的顺序
把奇数放在前面 偶数放在后面

import random
li=[random.randint(1,50)for i in range(15)]
print(li)
l=sorted(li,key=lambda x:3 if x%2==0 else 2)
print(l)
### Python 内置高阶函数简介 Python 提供了一些内置高阶函数,这些函数能够接受其他函数作为参数或者返回函数作为结果。其中最常用的几个高阶函数包括 `list`、`map`、`filter` 和 `reduce`。 --- #### 1. `map()` 函数 `map()` 函数会将传入的一个函数依次作用于可迭代对象(如列表、元组等)中的每一个元素,并返回一个新的可迭代对象。通常配合 `list()` 使用来获取最终的结果。 **语法**: ```python map(function, iterable) ``` **示例**: ```python numbers = [1, 2, 3, 4] squared_numbers = list(map(lambda x: x ** 2, numbers)) print(squared_numbers) # 输出: [1, 4, 9, 16] ``` 此代码通过 `map()` 将列表 `[1, 2, 3, 4]` 的每个元素平方[^1]。 --- #### 2. `filter()` 函数 `filter()` 函数用于过滤掉不符合条件的元素,它会对指定序列执行判断函数,只有返回值为 `True` 的元素会被保留下来。 **语法**: ```python filter(function, iterable) ``` **示例**: ```python numbers = [1, 2, 3, 4, 5] even_numbers = list(filter(lambda x: x % 2 == 0, numbers)) print(even_numbers) # 输出: [2, 4] ``` 这里利用 `filter()` 过滤出了偶数[^1]。 --- #### 3. `reduce()` 函数 `reduce()` 函数是一个累积操作工具,它可以将一个二元函数应用于序列的第一个和第二个元素,再将其结果与第三个元素结合,依此类推直到整个序列被处理完毕。需要注意的是,在 Python 3.x 版本中,`reduce()` 不再是内置函数,而是位于 `functools` 模块下。 **语法**: ```python from functools import reduce reduce(function, sequence[, initial]) ``` **示例**: - 计算累加和: ```python from functools import reduce numbers = [1, 2, 3, 4] sum_of_numbers = reduce(lambda x, y: x + y, numbers) print(sum_of_numbers) # 输出: 10 ``` - 处理嵌套数据结构并实现扁平化: ```python from functools import reduce def flatten(lst): return reduce( lambda x, y: x + y if isinstance(y, list) else x + [y], lst, [] ) nested_list = [1, [2, 3], [4, [5, 6]]] flat_list = flatten(nested_list) print(flat_list) # 输出: [1, 2, 3, 4, 5, 6] ``` 这段代码展示了如何使用 `reduce()` 来展开嵌套列表[^2]。 --- #### 4. 综合案例:实际应用场景 假设有一个商品价格列表,我们需要完成以下任务: 1. 对每件商品的价格增加 10% 增值税; 2. 筛选出价格超过 50 的商品; 3. 计算剩余商品的总价值。 **代码实现**: ```python from functools import reduce prices = [30, 20, 50, 100, 80] # 步骤1:对每个价格加上10%的增值税 new_prices = list(map(lambda x: x * 1.1, prices)) # 步骤2:筛选出价格大于50的商品 filtered_prices = list(filter(lambda x: x > 50, new_prices)) # 步骤3:计算符合条件商品的总价 total_price = reduce(lambda x, y: x + y, filtered_prices) print(total_price) # 输出: 253.0 ``` 该综合例子充分体现了 `map()`、`filter()` 和 `reduce()` 配合使用的强大功能[^5]。 --- ### 总结 以上介绍了 Python 中四个重要的高阶函数——`list` 转换方法、`map()` 映射变换、`filter()` 数据筛选以及 `reduce()` 结果累计的操作方式。它们各自有独特的用途,合理组合能极大简化复杂逻辑运算过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值