Python中map()和filter()函数的区别和用法
在Python中,map()和filter()是两个非常常用的函数。尽管它们都可以用于处理集合(列表、元组、集合等),但它们的功能不同。
map()函数
map()函数比较常用的功能是将一个函数应用于一个集合的所有元素,返回一个新的集合。
map()接收两个参数,一个是函数,一个是集合。函数将被应用于集合中的每个元素。map()返回的是一个可迭代对象(在Python3中是迭代器),可以通过以下方式进行迭代:
map_obj = map(function, iterable)
for i in map_obj:
print(i)
下面是一个简单的例子,将一个列表中的所有元素加1:
nums = [1,2,3,4]
plus_one = lambda x: x + 1
result = map(plus_one, nums)
print(list(result)) # [2,3,4,5]
需要注意的是,map()返回的是一个可迭代对象,而不是一个列表,因此在使用时需要将其转换为列表。
filter()函数
filter()函数的功能是过滤集合中的元素,只留下符合条件的元素。
filter()接收两个参数,一个是函数,一个是集合。函数将被应用于集合中的每个元素,如果函数返回True,则该元素会被保留在新的集合中。最终,filter()返回一个新的集合,其中只包含符合条件的元素。
filter_obj = filter(function, iterable)
for i in filter_obj:
print(i)
下面是一个简单的例子,将一个列表中的所有偶数过滤出来:
nums = [1,2,3,4,5,6]
even = lambda x: x % 2 == 0
result = filter(even, nums)
print(list(result)) # [2,4,6]
需要注意的是,filter()返回的也是一个可迭代对象,因此同样需要将其转换为列表。
总结
可以看出,map()和filter()非常相似,都会将函数应用于集合中的每个元素。不同的是,map()会将函数的返回值作为新的集合中的元素,而filter()则只保留符合条件的元素。
除了用于处理集合外,map()和filter()还可以用于函数式编程中函数的组合。例如,可以将多个函数组合起来,先用map()将其应用于集合中的每个元素,然后再用filter()过滤掉不需要的元素。
