使用 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
必须导入
请正确命名您的论点,x
和 y
没有任何帮助。我很快就想知道哪个是总和,哪个是电流。您的“答案”对此没有任何帮助。【参考方案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 函数在嵌套列表中查找总和的主要内容,如果未能解决你的问题,请参考以下文章