计算可迭代元组的行和列总计

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)。

【讨论】:

以上是关于计算可迭代元组的行和列总计的主要内容,如果未能解决你的问题,请参考以下文章

No4.元组的魔法

打印 2 个数组的行和列的总和

如何从一个可迭代的元组中填充两个(或更多)numpy 数组?

Numpy中找出array中最大值所对应的行和列

元组的拆包

panda迭代