Python 集合的归约与折叠是指将集合中所有元素通过某种指定的操作(比如加法、乘法等)进行累计计算的过程。这个过程得到的结果可能是一个单一的值(归约),也可能是一个新的集合(折叠)。
具体的实现可借助 Python 内置函数 reduce 和 functools 模块中的 reduce 和 partial 函数。下面是 Python 集合的归约与折叠的完整攻略:
集合的归约
reduce函数
reduce 函数定义如下:
reduce(function, iterable[, initializer])
其中,function 是一个接受两个参数的函数,它会对 iterable 中的所有元素进行累计计算。如果指定了 initializer 参数,则会将其作为第一个元素传递给函数。
例如,我们可以用 reduce 函数求一个列表的和,示例代码如下:
from functools import reduce
lst = [1, 2, 3, 4, 5]
# 同等写法
# total = reduce(lambda x, y: x + y, lst)
total = reduce((lambda x, y: x + y), lst)
print(total) #输出 15
自定义函数
除了使用内置的函数外,我们还可以通过自定义函数来实现归约。例如,下面的代码通过定义一个 lambda 函数来实现对列表中所有元素的乘积:
from functools import reduce
lst = [1, 2, 3, 4, 5]
# 同等写法
# product = reduce(lambda x, y: x * y, lst)
def multiply(x, y):
return x * y
product = reduce(multiply, lst)
print(product) #输出 120
集合的折叠
reduce 函数
折叠操作的实现也可以借助 reduce 函数完成。下面的代码演示了如何通过 reduce 函数将一个列表中所有大于 3 的元素加倍:
from functools import reduce
lst = [1, 2, 3, 4, 5]
result = reduce(lambda res, x: res + [x * 2] if x > 3 else res, lst, [])
print(result) #输出 [8, 10]
在这个例子中,我们通过 reduce 函数的第三个参数指定了初始值空列表 []。
functools.partial 函数
另一种实现折叠的方法是通过 functools.partial 函数实现。下面的代码演示了这种方法的使用,它通过定义一个 partial 函数来将一个列表中的所有元素都乘 2:
from functools import partial
lst = [1, 2, 3, 4, 5]
multiply_2 = partial(map, (lambda x: x * 2))
result = list(multiply_2(lst))
print(result) #输出 [2, 4, 6, 8, 10]
在这个例子中,我们通过 partial 函数实现了一个新的函数 multiply_2,它将列表中的每个元素都乘 2。然后,我们将这个新函数作为参数传给了 map 函数,从而得到了一个新的列表。