2014-09-16 2 views
-4

Для этого требуется, чтобы результаты были вычислены по мере их вычитания в yield. не должен хранить все данные в любой точке. Это должно поддерживать потоки данных, большие, чем память.Вычисление итогов строк и столбцов для итерации кортежей

Для каждой строки добавьте int в начале, которое является общей строкой строки.

После того, как весь вход обработан, добавьте итоговую строку с итогами каждого столбца на входе. Это должно включать начальный столбец , и вы должны обрабатывать столбцы, отсутствующие в заданной строке , как нули.

Итоговые значения строк являются первым столбцом вместо последнего (как это чаще встречается), поскольку он упрощает сортировку строк различной длины .

Например:

def func([(1,2,3), (4,5)]) = [(6,1,2,3),(9,4,5),(15,5,7,3)] 
+0

Возможно, вам поможет помощь, если вы определили язык. –

+0

Я не понимаю вопроса; не могли бы вы это прояснить? –

+2

Что вы написали до сих пор, и как это плохо? –

ответ

0

Надеюсь, вы узнаете что-то из этого:

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 в этом случае) для отсутствующих элементов.

+0

спасибо! Я никогда не думал об использовании izip :) – user2756325

Смежные вопросы