Python高阶函数详解:map、filter、reduce与sorted用法指南

陆景行
陆景行
发布时间:2026-10-15| 4人浏览过
原创

本文深入解析Python中四大高阶函数的核心用法。map用于映射处理可迭代对象,filter实现数据过滤,reduce执行累积计算,sorted提供灵活排序方案。通过具体代码示例,展示如何自定义函数配合内置高阶函数,提升代码简洁性与执行效率,适用于各类数据处理场景。

什么是高阶函数

在Python中,高阶函数是指那些能够将其他函数作为参数传入的函数。简而言之,只要一个函数的形参中包含函数类型,该函数即被定义为高阶函数。

高阶函数的来源既包括开发者通过def关键字自定义的函数,也涵盖Python语言内置提供的高阶函数。

自定义一个高阶函数

以下示例中,函数senior接收一个函数作为参数,因此它属于高阶函数;而函数tenfold的参数仅为普通数值,故其仅为普通函数。

# 定义高阶函数
def senior(func, container):
   """
   将容器中的数据依次放入函数中进行运算,
   将结果返回到迭代器中,最后返回迭代器。
   """
   lst = list()
   for i in container:
      lst.append(func(i))
   return iter(lst)


# 定义普通的功能函数
def tenfold(num):
   """
   十倍器
   将数据乘 10,返回结果。
   """
   return num * 10


# 定义一个列表
lst = [10, 20666, 'msr']

# 使用高阶函数
it = senior(tenfold, lst)
print(list(it)) # [100, 206660, 'msrmsrmsrmsrmsrmsrmsrmsrmsrmsr']

常用的内置高阶函数

函数功能作用
map处理可迭代对象中的数据,将处理的结果返回到迭代器中。
filter过滤可迭代对象中的数据,将过滤好的数据返回到迭代器中。
reduce处理可迭代对象中的数据,将最终的结果返回出来。
sorted排序可迭代对象中的数据,将排序好的结果返回出来。

map函数

语法:map(function, Iterable)

参数说明

function:指定执行的函数,可以是用户自定义函数或Python内置函数;

iterable:指定可迭代对象,包括容器类型数据、类容器类型数据、range对象或迭代器等具备迭代性的数据。

功能

该函数依次从可迭代对象中取出元素,将其传入指定函数进行处理,将处理后的结果逐一放入新的迭代器中,最终返回该迭代器。

实例

示例展示了将列表中的字符串元素转换为整型,并返回转换后的结果。

lst = ['1', '2', '3', '4']

""" 使用常规的写法 """
new_lst = list()
for i in lst:
    new_lst.append(int(i))
print(new_lst)  # [1, 2, 3, 4]


""" 使用map函数实现 """
it = map(int, lst)
new_lst = list(it)
print(new_lst)  # [1, 2, 3, 4]

另一个实例演示了列表中的每个数字依次乘以2的下标索引+1次方,通过自定义函数配合map实现该功能。

lst = [1, 2, 3, 4]

""" 普通的方法,利用左移 """
new_lst = list()
for i in lst:
	res = i << i
	new_lst.append(res)
print(new_lst)  # [2, 8, 24, 64]


""" 使用map函数 """
# 先定义一个左移函数,自定义的函数必须是一个带参函数并且有返回值
def func(num):
	return num << num
new_lst = list(map(func, lst))
print(new_lst)  # [2, 8, 24, 64]


""" 使用lambda简化 """
new_lst = list(map(lambda num: num << num, lst))
print(new_lst)  # [2, 8, 24, 64]

filter函数

语法:filter(function, iterable)

其参数含义与map函数一致,分别指定处理函数和可迭代对象。

功能

filter用于数据过滤。它将可迭代对象中的元素逐个传入指定函数,若函数返回值为真(True),则保留该数据;否则丢弃。最终返回包含保留数据的迭代器。

实例

示例展示了如何从容器中筛选并保留所有的偶数。

lst = [11, 2, 3, 34, 4, 4, 55]

""" 常规写法 """
new_lst = list()
for i in lst:
   if i % 2 == 0:
      new_lst.append(i)
print(new_lst)  # [2, 34, 4, 4]


""" 使用filter函数 """
def func(num):
   if num % 2 == 0:
      return True
new_lst = list(filter(func, lst))
print(new_lst)  # [2, 34, 4, 4]


""" filter + lambda """
new_lst = list(filter(lambda num: True if (num % 2 == 0) else False, lst))
print(new_lst)  # [2, 34, 4, 4]

reduce函数

语法:reduce(function, iterable)

其参数含义与map、filter函数保持一致。

功能

reduce用于累积计算。它将可迭代对象中的前两个值传入函数进行运算,得到结果后再与第三个值运算,依此类推,直到遍历完所有元素,最终返回累积计算的结果。

基于上述功能,reduce接收的处理函数必须能够接收两个参数以进行二元运算。

实例

使用reduce函数前,需先从标准库functools中导入该模块。

示例展示了如何将列表中的数据元素组合拼接为一个完整的整数。

from functools import reduce

lst = [2, 0, 6, 6, 6]


""" 常规方法 """
char = str()
for i in lst:
   char += str(i)
print(int(char))    # 20666


""" 使用reduse函数 """
def func(x, y):
   return x * 10 + y
res = reduce(func, lst)
print(res)  # 20666


""" reduce + lambda """
res = reduce((lambda x, y: (x * 10 + y)), lst)
print(res)  # 20666

sorted函数

语法:sorted(Iterable, key=function, reverse=False)

参数说明

iterable:指定待排序的可迭代对象;

key:指定用于提取比较键的函数,默认为None;

reverse:指定排序方向,默认为False(升序),设为True则为降序;

功能

若未指定key函数,数据将直接按照ASCII码值进行排序;若指定了key函数,数据将先经该函数处理,再根据处理结果进行排序,并返回新的排序后数据,原数据保持不变。

需注意,当指定key函数时,排序依据是函数返回的计算结果,但返回的仍是原数据本身,而非计算后的结果值。

实例

示例展示了如何使用sorted对列表数据进行排序操作。

lst = [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]

""" 使用列表的内置函数进行排序,默认升序 """
lst.sort()
print(lst)  # [-3, 1, 5, 6, 12, 12, 23, 34, 342, 2345]
# 降序排序
lst.sort(reverse=True)
print(lst)  # [2345, 342, 34, 23, 12, 12, 6, 5, 1, -3]


lst = [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]
""" 使用sorted进行排序 """
new_lst = sorted(lst)
print(new_lst)  # [-3, 1, 5, 6, 12, 12, 23, 34, 342, 2345]
print(lst)      # [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]

此外,sorted函数支持将数据传入指定函数进行处理,并依据处理结果进行排序,这提供了极大的灵活性。

lst = [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]

""" 按照绝对值进行排序 """
new_lst = sorted(lst, key=abs)
print(new_lst)  # [1, -3, 5, 6, 12, 12, 23, 34, 342, 2345]


""" 按照除以10的余数进行排序 """
def func(num):
   return num % 10
new_lst = sorted(lst, key=func)
print(new_lst)  # [1, 342, 12, 12, 23, 34, 5, 2345, 6, -3]

# 可以看到,我们指定函数之后排序的结果既不是原数据的绝对值、也不是原数据除以10的余数,而是根据这两种计算结果对原数据进行了排序。

sort和sorted

既然列表已有内置的sort方法,为何还需要使用sorted函数?

  • sorted可以接受任何可迭代对象进行排序,而sort仅是列表对象的内置方法,仅适用于列表;
  • sorted排序后返回一个新的列表,不修改原数据;sort则直接修改原列表;
  • sorted支持通过key参数指定函数,依据函数计算结果进行复杂排序;sort仅能依据数值大小或ASCII码进行简单排序。

总结

高阶函数的核心定义是:将函数作为参数传递的函数。

map(Function, Iterable):将可迭代对象中的元素逐一取出放入函数中运算,最后返回一个包含结果的迭代器。

filter(Function, Iterable):用于过滤数据,将可迭代对象放入函数中运算,若结果为真则保留数据,否则舍弃,最终返回迭代器。

reduce(Function, Iterable):用于累积计算,将可迭代对象中的前两个元素取出运算,结果再与后续元素依次运算,最终返回累积结果。

sorted(Iterable, [key=Function], [reverse=False]):对可迭代数据进行排序,或先将数据放入函数运算后,根据运算结果进行排序并返回新列表。

以上即为Python中高阶函数(map, filter, reduce, sorted)的详细使用指南,更多关于Python高阶函数的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。