欢迎访问宙启技术站
智能推送

Python中map()和filter()函数的区别和用法

发布时间:2023-06-13 13:18:53

在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()过滤掉不需要的元素。