计算可迭代元组的行和列总计
Posted
技术标签:
【中文标题】计算可迭代元组的行和列总计【英文标题】:Compute the row and column totals for an iterable of tuples 【发布时间】:2014-11-10 06:11:03 【问题描述】:这需要yield
计算结果。不应在任何时候存储所有数据。这应该支持大于内存的数据流。
对于每一行,在开头添加一个 int,即该行的总和。
处理完整个输入后,添加最后一行 输入中每一列的总数。这应该包括最初的 总列,您应该处理给定中缺少的列 行为零。
行总计是第一列而不是最后一列 (更常见)因为它使不同长度的行更容易 处理。
例如:
def func([(1,2,3), (4,5)]) = [(6,1,2,3),(9,4,5),(15,5,7,3)]
【问题讨论】:
如果您确定了语言,您可能会获得更多帮助。 我不明白这个问题;你能澄清一下吗? 到目前为止你写了什么,有什么不足的地方? 您的示例包含错误,结果应该是[(6,1,2,3),(9,4,5),(15,5,7,3)]
(总行的最后一列应该是3,而不是4。)
【参考方案1】:
希望你能从中学到一些东西:
from itertools import izip_longest
def func(rows):
totals = []
for row in rows:
row = (sum(row),) + row
totals = [sum(col) for col in izip_longest(totals, row, fillvalue=0)]
yield row
yield tuple(totals)
>>> list(func([(1,2,3), (4,5)]))
[(6, 1, 2, 3), (9, 4, 5), [15, 5, 7, 3]]
此代码遍历所有行,生成一个包含求和列和原始列的元组。
izip_longest()
将当前行中的项目与totals
中的相应项目配对,以保持每列的运行总计。选择 izip_longest()
是因为它可以处理不同长度的行,并且您可以为缺失的项目提供填充值(在本例中为 0)。
【讨论】:
以上是关于计算可迭代元组的行和列总计的主要内容,如果未能解决你的问题,请参考以下文章