Python中的map()
和filter()
函数是处理可迭代对象(如列表、元组等)时非常有用的内置函数。
1. map()函数
map()
函数将一个函数应用于一个输入列表(或其他可迭代对象)的所有元素,并返回一个包含所有函数返回值的迭代器。
基本语法如下:
map(function, iterable, ...) |
其中,function
是要应用的函数,iterable
是一个或多个可迭代对象。
示例:
# 定义一个将数字乘以2的函数 | |
def multiply_by_two(n): | |
return n * 2 | |
# 创建一个列表 | |
numbers = [1, 2, 3, 4, 5] | |
# 使用map()函数将multiply_by_two函数应用于numbers列表的每个元素 | |
result = map(multiply_by_two, numbers) | |
# 注意:map()返回的是一个迭代器,要查看结果需要将其转换为列表 | |
result_list = list(result) | |
print(result_list) # 输出: [2, 4, 6, 8, 10] | |
# 也可以使用lambda表达式代替函数 | |
result_lambda = map(lambda n: n * 2, numbers) | |
result_list_lambda = list(result_lambda) | |
print(result_list_lambda) # 输出: [2, 4, 6, 8, 10] |
2. filter()函数
filter()
函数用于过滤序列,过滤掉不符合指定条件的元素,返回由符合条件元素组成的新列表(实际上是迭代器)。
基本语法如下:
filter(function, iterable) |
其中,function
是一个布尔函数,用于测试可迭代对象中的每个元素是否满足某个条件,iterable
是可迭代对象。
示例:
# 定义一个检查数字是否为偶数的函数 | |
def is_even(n): | |
return n % 2 == 0 | |
# 创建一个列表 | |
numbers = [1, 2, 3, 4, 5] | |
# 使用filter()函数将is_even函数应用于numbers列表的每个元素,过滤出偶数 | |
result = filter(is_even, numbers) | |
# 注意:filter()返回的是一个迭代器,要查看结果需要将其转换为列表 | |
result_list = list(result) | |
print(result_list) # 输出: [2, 4] | |
# 也可以使用lambda表达式代替函数 | |
result_lambda = filter(lambda n: n % 2 == 0, numbers) | |
result_list_lambda = list(result_lambda) | |
print(result_list_lambda) # 输出: [2, 4] |
注意,在Python 3中,map()
和filter()
返回的都是迭代器,因此如果你需要查看结果,通常需要将它们转换为列表或其他可迭代对象。在Python 2中,map()
和filter()
直接返回列表。