【问题标题】: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。)

标签: python list iterable


【解决方案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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    相关资源
    最近更新 更多