Python基础之 Map, Filter和Reduce|Python 主题月

479 阅读1分钟

1. Map, Filter和Reduce

本文正在参加「Python主题月」,详情查看活动链接

这三个函数有助于使用函数式编程方法。我们将一一讨论它们并了解它们的用例。

大多数情况下,我们希望将所有列表元素一一传递给函数,然后收集输出。例如:

items = [1, 2, 3, 4, 5]
list1 = []
for i in items:
    list1.append(i**2)

Map允许我们以更简单和更好的方式实现这一点。

items = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, items))

大多数时候我们使用 lambda 表达式,map也可以这样做。我们甚至可以有一个函数列表。

def multiply(x):
    return (x*x)
def add(x):
    return (x+x)

funcs = [multiply, add]
for i in range(5):
    value = list(map(lambda x: x(i), funcs))
    print(value)

# Output:
# [0, 0]
# [1, 2]
# [4, 4]
# [9, 6]
# [16, 8]

4.2. Filter

顾名思义,filter创建一个函数返回 true 的元素列表。这是一个简短而简洁的示例:

number_list = range(-5, 5)
less_than_zero = list(filter(lambda x: x < 0, number_list))
print(less_than_zero)

# Output: [-5, -4, -3, -2, -1]

过滤器类似于 for 循环,但它是一个内置函数并且速度更快。

注意: 如果地图和过滤器对您来说并不美观,那么您可以阅读list/dict/tuple理解。

4.3. Reduce

Reduce是一个非常有用的函数,用于在列表上执行一些计算并返回结果。它将滚动计算应用于列表中的连续值对。例如,如果您想计算整数列表的乘积。

因此,您在 python 中执行此任务的正常方法是使用基本的 for 循环:

product = 1
list = [1, 2, 3, 4]
for num in list:
    product = product * num

# product = 24

现在让我们用reduce试试:

from functools import reduce
product = reduce((lambda x, y: x * y), [1, 2, 3, 4])

# Output: 24