Python-内置高阶函数总结

map()

  1. 接收两个参数,一个是函数 一个是序列
  2. map()将传入的函数依次作用到序列的每个元素,并且把结果作为新的序列返回
import random
# 对一个序列[-1,3,-4,-5]的每一个元素求绝对值
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)))

结果:
[1, 3, 4, 5]
[3, 5, 7, 4, 5, 3, 4, 7, 5, 4]
[6, 120, 5040, 24, 120, 6, 24, 5040, 120, 24]

reduce()

  1. 接收两个参数,一个是函数 一个是序列
  2. 把一个函数作用在一个序列上,这个函数必须接收序列两个参数
  3. reduce把结果继续和序列的下一个元素做累积计算
    reduce(f,[x1,x2,x3,x4]) =f(f(f(x1,x2),x3),x4)
  4. 另:python2中:reduce是内置函数;python3中式模块functools中的函数
from functools import reduce
#计算1-10的累计乘积
def multi(x,y):
    return x * y
print(reduce(multi,range(1,10)))

#计算1-100的累计加和
def add(x,y):
    return x+y
print(reduce(add,range(1,101)))

显示结果:
3628800
5050

filter()

  1. filter()是个过滤函数和map()类似的,也接收一个函数和一个序列
  2. 但是和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True或者False决定保留还是丢弃该元素
#10以内的偶数
def isodd(num):
    if num % 2 == 0:
        return True
    else:
        return False
print(list(filter(isodd,range(11))))
显示结果:
[0, 2, 4, 6, 8, 10]

sorted()

  1. sorted()对输入的序列进行排序
  2. 不改变原来的列表内容,生成一个新的列表
list = [6,7,8,9,1,2,34]
list2 = sorted(list)
print(list)
#[6, 7, 8, 9, 1, 2, 34]
print(list2)
#[1, 2, 6, 7, 8, 9, 34]

list2 = [6,8,-8,-4,2,3,4,7,8]
list2.sort()
print(list2)
#[-8, -4, 2, 3, 4, 6, 7, 8, 8]
list3 = sorted(list2,key=abs)	#abs绝对值
print(list3)
#[2, 3, -4, 4, 6, 7, -8, 8, 8]

s = ['da','Ffsf','FSF','das']
print(s)
#['da', 'Ffsf', 'FSF', 'das']
print(sorted(s))
#['FSF', 'Ffsf', 'da', 'das']
print(sorted(s,key=str.lower))
#['da', 'das', 'Ffsf', 'FSF']
print(sorted(s,key=str.upper))
#['da', 'das', 'Ffsf', 'FSF']

匿名函数

  1. 匿名函数的关键字为 lambda;以冒号:分割代码,前面是形参冒号后面是返回值
  2. lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  3. lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
from functools import reduce
def add(x,y):
    return x+y
print(reduce(add,range(10)))
#45
print(reduce(lambda x,y:x+y,range(10)))
#45
def mypow(x):
    return x ** 2
print(list(map(lambda x:x**2,range(5))))
#[0, 1, 4, 9, 16]

def isood(num):
    return num % 2 == 0
print(list(filter(lambda x:x%2==0,range(10))))
#[0, 2, 4, 6, 8]
### 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、付费专栏及课程。

余额充值