Python高级函数: map(), filter(), reduce()
Python是一种编程语言,它有许多强大的函数,这使得Python成为数据科学、机器学习和Web开发等领域的首选语言之一。其中三个非常有用的函数是map()、filter()和reduce(),它们会使您的代码更加精简、功能更强大。
map()函数:
map函数接受两个参数: 个参数是一个函数,第二个参数是一个可迭代的序列,比如列表或元组。 map()函数的作用就是将该序列中的每个元素应用于给定的函数。
例如,假设我们有一个列表,其中包含几个数字。我们可以定义一个函数来将每个数字加倍,然后使用map()函数将该函数应用于该列表中的每个元素:
numbers = [1, 2, 3, 4, 5]
def double(n):
return n*2
result = map(double, numbers)
print(list(result)) #输出[2, 4, 6, 8, 10]
上述代码中的列表numbers含有一些数字。我们定义了一个函数double(),这个函数会接收一个数字,并将其加倍。接下来,我们通过调用map(double, numbers)的方式,将double这个函数作用于numbers列表中的每个元素上。注意,调用map()函数的结果需要通过内置的list函数转化为列表输出。
filter()函数:
filter函数也接受两个参数: 个参数是一个函数,第二个参数是一个序列。 filter()函数的作用是过滤出给定序列中满足条件的元素。因此,只有当序列中的元素满足给定的条件时才会保留,并作为新的序列返回。
例如,假设我们要从一些数字中过滤出所有的偶数。我们可以定义一个函数来判断数字是否为偶数,然后将此函数作为参数传递给过滤函数:
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def is_even(n):
return n % 2 == 0
result = filter(is_even, numbers)
print(list(result)) #输出[2, 4, 6, 8, 10]
上述代码中,列表numbers中含有一些数字。我们定义了一个函数is_even(),这个函数判断输入的数字是否为偶数,返回布尔类型值True或False。 接下来,我们通过调用filter(is_even, numbers)的方式,将is_even这个函数应用于numbers列表中的每个元素上。所有判定为真(即判断结果为True)的元素会保留下来。
reduce()函数:
reduce()函数的作用是在给定序列中继续应用一个函数,直到该序列缩减成一个单一的值。 reduce()函数是functools模块中的函数,因此我们需要确保可以通过import语句导入functools模块。
例如,假设我们要将一组数字相乘(即计算它们的乘积)。我们可以定义一个乘法函数,然后将此函数应用于序列中的每个元素:
from functools import reduce
numbers = [1,2,3,4,5]
def multiply(x, y):
return x * y
result = reduce(multiply, numbers)
print(result) #输出: 120
上述代码中,我们将functools模块导入到代码中,然后定义了一个函数multiply(),此函数接受两个参数,并将它们相乘。 接下来,我们使用reduce()函数将multiply()函数应用于numbers列表中的每个元素,直到只剩下一个元素。 最终结果是120,因为1*2*3*4*5等于120。
这三个函数都是Python中非常有用的高级函数,它们可以使您的代码更加简洁、灵活和功能强大。掌握这些函数的基本语法和用法将有助于您编写更好的Python代码。
