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

使用Python的map和filter函数

发布时间:2023-06-12 18:40:37

在Python中,map和filter是两个常用的高阶函数,它们可以帮助我们高效地对数据集进行操作。map函数用于对数据集中的每一个元素都应用一个函数,并返回新的列表。filter函数则是根据一个给定的函数筛选出符合条件的元素,并将它们返回到一个新列表中。本文将介绍Python中的map和filter函数,并通过一些实例,演示它们如何应用于实际工作中。

一、map函数

map函数是Python中的一个内置函数,它可以对一个可迭代对象(如列表、元组、字符串等)中的每个元素应用一个函数,并将结果保存在一个新的列表中。其基本语法如下:

map(function, iterable[, iterable2, iterable3,...iterableN])

其中,函数function是应用于每个元素的函数,而iterable是一个或多个可迭代对象,存储着要被函数处理的元素。当只有一个可迭代对象时,可以省略[],当有多个可迭代对象时,它们必须具有相同的长度,否则在长度最短的可迭代对象用完后,map函数将自动停止处理。

下面,我们通过一些实例,演示map函数的应用。

实例1:将一个列表中的元素全部转化为整型

我们先定义一个存储字符串元素的列表list1:

list1 = ['1', '2', '3', '4', '5']

现在,我们使用map函数,将list1中的元素全部转化为整型,并保存在一个新列表中。代码如下:

int_list = list(map(int, list1))
print(int_list)

输出:

[1, 2, 3, 4, 5]

可以看到,int_list中的元素已经全部转化为整型。

实例2:将两个列表对应元素相加

现在,我们将map函数应用于两个可迭代对象,这里的函数将两个参数相加,并将结果作为map函数的输出。具体实现如下:

list1 = [1, 2, 3, 4, 5]
list2 = [10, 20, 30, 40, 50]

res_list = list(map(lambda x, y: x + y, list1, list2))

print(res_list)

输出:

[11, 22, 33, 44, 55]

从输出结果中,可以看出map函数成功将两个列表中对应的元素相加,并将结果保存在一个新的列表中。

二、filter函数

filter函数是Python中的另一个内置函数,它可以对一个可迭代对象中的每个元素应用一个函数,并根据函数结果返回一个筛选后的新列表。其基本语法为:

filter(function, iterable)

其中,函数function是应用于每个元素的函数,而iterable是一个可迭代对象。与map函数一样,filter函数也可以有多个可迭代对象,但是在 个可迭代对象用完之后就会结束处理。

下面,我们通过一些实例,演示filter函数的应用。

实例1:筛选出一个列表中的所有偶数

我们先定义一个存储整型元素的列表list1:

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

现在,我们使用filter函数,将list1中所有的偶数筛选出来,并存放在一个新列表中。代码如下:

even_list = list(filter(lambda x: x % 2 == 0, list1))
print(even_list)

输出:

[2, 4, 6, 8, 10]

可以看到,我们成功地将list1中所有偶数筛选出来了。

实例2:筛选出一个列表中的所有质数

除了能够筛选出数值上满足某种关系的元素之外,filter函数还可以对复杂一些的条件进行筛选。例如,我们现在要筛选出一个列表中的所有质数,就需要设计一个判断函数。具体实现如下:

def filter_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5)+1):
        if n % i == 0:
            return False
    return True

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
prime_list = list(filter(filter_prime, list1))
print(prime_list)

输出:

[2, 3, 5, 7]

可以看到,我们编写的filter_prime函数成功将列表中的所有质数筛选出来了。

三、map和filter的应用

在实际工作中,map和filter函数通常不是单独使用的,而是与一些其他函数和技巧结合起来使用,从而完成更加复杂的任务。在这里,我们简单介绍一下如何使用map和filter函数组合实现过滤、映射和缩减(Reduce)操作。

过滤(Filter)

过滤操作可以筛选出符合某种条件的元素,例如我们可以对一组人员数据进行筛选,只选择其中年龄在18岁以上的成年人,代码如下:

person_list = [
    {'name': 'Tom', 'age': 23},
    {'name': 'David', 'age': 19},
    {'name': 'Alice', 'age': 17},
    {'name': 'Bob', 'age': 21}
]

adult_list = list(filter(lambda x: x['age'] >= 18, person_list))
print(adult_list)

输出:

[{'name': 'Tom', 'age': 23}, {'name': 'David', 'age': 19}, {'name': 'Bob', 'age': 21}]

从输出结果中可以看出,我们成功地将年龄在18岁以上的人员筛选出来了。

映射(Map)

将一个数据集中的元素转化为另一种类型或形式,就是映射操作。例如,我们现在有一组温度数据,需要将温度从华氏度转化为摄氏度,代码如下:

fahrenheit = [32, 56, 78, 92, 106]

celsius = list(map(lambda x: (x-32)*5/9, fahrenheit))
print(celsius)

输出:

[0.0, 13.333333333333334, 25.555555555555557, 33.333333333333336, 41.111111111111114]

可以看到,我们成功地将华氏度转化为了摄氏度。

缩减(Reduce)

缩减操作,即对一个数据集中的元素进行合并或求和等操作,最终得到一个新的结果。例如,我们现在有一个列表,需要对其中的元素进行加法操作,代码如下:

from functools import reduce

num_list = [1, 2, 3, 4, 5]

sum_num = reduce(lambda x, y: x+y, num_list)
print(sum_num)

输出:

15

可以看到,我们将列表中的每个元素相加,得到了一个结果15。reduce函数的作用就是对列表中的元素依照指定的函数进行缩减操作。

四、总结

本文介绍了Python中的map和filter函数,并结合实例介绍了它们在实际工作中的应用。map函数是对一个数据集中的每个元素应用一个函数,并将结果保存在一个新的列表中。filter函数则是根据一个给定的函数筛选出符合条件的元素,并