使用 lambda 函数在嵌套列表中查找总和

Posted

技术标签:

【中文标题】使用 lambda 函数在嵌套列表中查找总和【英文标题】:Finding a sum in nested list using a lambda function 【发布时间】:2014-09-22 17:29:29 【问题描述】:

我有一个类似的数据结构

table = [
    ("marley", "5"),
    ("bob", "99"),
    ("another name", "3")
]

我想做的是,在功能上得到第二列 (5 + 99 + 3) 的总和:

total = sum(table, lambda tup : int(tup[1]))

这与 python 函数sorted 的语法相似,但这不是你使用 python 的sum 函数的方式。

总结第二列的pythonic/功能方式是什么?

【问题讨论】:

【参考方案1】:

一种方法是使用generator expression:

total = sum(int(v) for name,v in table)

【讨论】:

【参考方案2】:

减少可以帮助

from functools import reduce

total = reduce(lambda accumulator,element:accumulator+int(element[1]), table,0)

【讨论】:

我希望这是使用functools 中定义的reduce。我刚刚添加了那个导入。 感谢@StevenC.Howell 的澄清!在 2014 年,答案在 Python2 中,reduce 是基本功能。是的 Python3 reduce 必须导入 请正确命名您的论点,xy 没有任何帮助。我很快就想知道哪个是总和,哪个是电流。您的“答案”对此没有任何帮助。【参考方案3】:

如果你想使用 lambda,下面应该解决它:

total = sum(map(lambda x: int(x[1]), table))

【讨论】:

【参考方案4】:
sum(map(int,zip(*table)[-1]))

是一种方法......但是有很多选择

【讨论】:

选项1 - sum(map(int, map(operator.itemgetter(1), table)))【参考方案5】:

您还可以获取字典中的值:

total = sum(map(int, dict(table).values())

这可能有点晦涩。

【讨论】:

此答案有效,但它会为表中的每行创建一个字典。这不是很节省内存。 它只使用该表创建一个字典,并遍历将每个值转换为整数的值,然后对它们求和。对于一张大桌子来说,这可能是令人望而却步的。 @PeterdeRivaz 使用生成器的答案是最 Pythonic 的。【参考方案6】:

一种方法是使用索引。

total=sum(items[1] for items in table)

【讨论】:

以上是关于使用 lambda 函数在嵌套列表中查找总和的主要内容,如果未能解决你的问题,请参考以下文章

如何在嵌套的 JS 对象中查找特定属性的总和

在嵌套列表中查找元素,但是我们不知道该列表

在python中查找列表的子集的总和

在c#中使用lambda或linq查找项目索引[关闭]

如何在python中的字典列表中查找项目的累积总和

查找具有给定总和的数字列表的所有组合