在 Python 中使用列表推导式计算总和

在 Python 中使用列表理解计算总和

Calculate sum using a list comprehension in Python

reduce()列表理解返回一个列表,而不是一个数字,但我们可以使用函数以类似的方式计算列表中元素的总和。
reduce()函数可用于在每个元素上调用 reducer 函数并生成单个值。

主程序
from functools import reduce list_of_numbers = [5, 10, 15] total = reduce(lambda acc, current: acc + current, list_of_numbers) print(total) # 👉️ 30

我们使用该reduce()函数对列表求和。

reduce
函数采用以下 3 个参数

姓名 描述
功能 一个带有 2 个参数的函数 – 累加值和可迭代的值。
可迭代的 iterable 中的每个元素都将作为参数传递给函数。
初始值设定项 一个可选的初始化值,在计算中放置在可迭代项之前。
例子中的lambda函数以累计值和当前值作为参数,返回两者之和。

在列表项中运行 reducer 函数的最终结果是一个单一的值——总和。

如果我们为参数提供一个值initializer,它会被放在计算中可迭代项的前面。

主程序
from functools import reduce list_of_numbers = [5, 10, 15] total = reduce( # 👇️ accumulator is `0` on first iteration lambda acc, current: acc + current, list_of_numbers, 0 # 👈️ initial value of 0 ) print(total) # 👉️ 30

您还可以提取该函数并使用几个print()调用来更好地了解其reduce工作原理。

主程序
from functools import reduce list_of_numbers = [5, 10, 15] def get_sum(acc, current): print('accumulator: ', acc) print('current: ', current) return acc + current total = reduce( get_sum, list_of_numbers, 0 # 👈️ initial value of 0 (acc is 0 on first iteration) ) print(total) # 👉️ 30

在示例中,我们传递0了初始化参数,因此 的值
accumulator将出现0在第一次迭代中。

accumulator如果我们没有为 传递一个值,那么的值将被设置为可迭代对象中的第一个元素initializer

主程序
from functools import reduce list_of_numbers = [5, 10, 15] def get_sum(acc, current): # 👇️ acc is 5 on first iteration print('accumulator: ', acc) print('current: ', current) return acc + current total = reduce( get_sum, list_of_numbers, ) print(total) # 👉️ 30

如果iterable为空并且initializer提供了,initializer
则返回。

主程序
from functools import reduce list_of_numbers = [] def get_sum(acc, current): print('accumulator: ', acc) print('current: ', current) return acc + current total = reduce( get_sum, list_of_numbers, 0, # 👈️ set initializer to 0 ) print(total) # 👉️ 0

上例中的列表为空,因此0返回了初始化器 ( ) 的值。

如果initializer未提供并且可迭代对象仅包含1项目,则返回第一项。

主程序
from functools import reduce list_of_numbers = [5] def get_sum(acc, current): print('accumulator: ', acc) print('current: ', current) return acc + current total = reduce( get_sum, list_of_numbers, ) print(total) # 👉️ 5

示例中的列表仅包含一个元素,我们没有为 提供值initializer,因此该reduce()函数返回了列表元素。