Python 中 map reduce filter sorted 函数的使用方法
Python 中 map reduce filter sorted 函数的使用方法

在Python中,map(), reduce(), filter(), 和 sorted() 函数是常用的函数式编程工具,能够方便地对数据进行处理和转换。

1. map() 函数

map() 函数用于对可迭代对象中的每个元素执行指定的函数,并返回一个迭代器,其中每个元素都是原始数据元素经过函数转换后的结果。

语法

1map(function, iterable)
  • function:应用于每个元素的函数。
  • iterable:要遍历的可迭代对象,如列表、元组等。

示例: 将一个列表中的每个数字平方:

1numbers = [1, 2, 3, 4, 5]
2squared_numbers = map(lambda x: x ** 2, numbers)
3print(list(squared_numbers))  # 输出:[1, 4, 9, 16, 25]

注意事项

  • map() 返回的是一个迭代器,因此通常需要使用 list() 来转换为列表。
  • 可以传入多个可迭代对象,但所有可迭代对象的长度必须相同。

2. reduce() 函数

reduce() 函数用于对可迭代对象进行连续的二元运算,将整个集合归约为单一的结果。与 map()filter() 不同,它位于 functools 模块中,需要先导入。

语法

1from functools import reduce
2reduce(function, iterable[, initializer])
  • function:应用于每对元素的二元函数,通常接收两个参数。
  • iterable:可迭代对象。
  • initializer(可选):初始化的起始值。

示例: 计算列表中所有数字的累积乘积:

1from functools import reduce
2
3numbers = [1, 2, 3, 4, 5]
4product = reduce(lambda x, y: x * y, numbers)
5print(product)  # 输出:120

注意事项

  • 如果可迭代对象为空且未指定 initializer,会抛出 TypeError 异常。
  • 二元函数必须能够处理可迭代对象中的每个元素。

3. filter() 函数

filter() 函数用于对可迭代对象中的元素进行筛选,只保留那些使函数返回 True 的元素。

语法

1filter(function, iterable)
  • function:应用于每个元素的布尔函数(返回值应为 TrueFalse)。
  • iterable:要筛选的可迭代对象。

示例: 筛选出列表中所有的偶数:

1numbers = [1, 2, 3, 4, 5, 6]
2even_numbers = filter(lambda x: x % 2 == 0, numbers)
3print(list(even_numbers))  # 输出:[2, 4, 6]

注意事项

  • 如果 functionNone,则会过滤掉所有布尔值为 False 的元素。
  • filter() 返回的是一个迭代器,因此常使用 list() 转换为列表。

4. sorted() 函数

sorted() 函数用于对可迭代对象进行排序,并返回一个新的已排序的列表。

语法

1sorted(iterable, *, key=None, reverse=False)
  • iterable:要排序的可迭代对象。
  • key(可选):用于从每个元素中提取比较关键字的函数。
  • reverse(可选):如果为 True,则按降序排列。

示例: 对一个包含字符串的列表按长度排序:

1words = ["apple", "banana", "cherry", "date"]
2sorted_words = sorted(words, key=len)
3print(sorted_words)  # 输出:['date', 'apple', 'banana', 'cherry']

按降序排序一个列表中的数字:

1numbers = [5, 2, 9, 1, 5, 6]
2sorted_numbers = sorted(numbers, reverse=True)
3print(sorted_numbers)  # 输出:[9, 6, 5, 5, 2, 1]

注意事项

  • sorted() 会返回一个新的列表,不会改变原始可迭代对象的顺序。
  • 自定义排序可以通过设置 key 参数实现,如排序字典列表时可以使用 key=lambda item: item['key_name']

总结

  • map() 用于对每个元素应用一个函数,并生成一个新集合。
  • reduce() 用于将集合中的所有元素根据二元运算规约为单一值。
  • filter() 用于筛选符合条件的元素。
  • sorted() 用于对可迭代对象进行排序。

这些函数让代码更简洁,更符合函数式编程的风格,适用于处理数据流和进行数据转换操作。


最后修改于 2024-10-12 16:09