Сумма списка списков; возвращает список сумм

Пусть data = [[3,7,2],[1,4,5],[9,8,7]]

Предположим, я хочу суммировать элементы для индексов каждого списка в списке, например, добавлять числа в столбце матрицы, чтобы получить один список. Я предполагаю, что все списки в данных равны по длине.

  print foo(data) [[3,7,2], [1,4,5], [9,8,7]] _______ >>>[13,19,14] 

Как я могу перебирать список списков без ошибки индекса? Может быть, лямбда? Благодаря!

6 Solutions collect form web for “Сумма списка списков; возвращает список сумм”

Вы можете попробовать следующее:

 In [9]: l = [[3,7,2],[1,4,5],[9,8,7]] In [10]: [sum(i) for i in zip(*l)] Out[10]: [13, 19, 14] 

Это использует комбинацию zip и * чтобы распаковать список, а затем закрепить элементы в соответствии с их индексом. Затем вы используете понимание списка, чтобы перебирать группы схожих индексов, суммируя их и возвращаясь в свое «исходное» положение.

Надеюсь, сделаем это более понятным, вот что происходит, когда вы перебираете zip(*l) :

 In [13]: for i in zip(*l): ....: print i ....: ....: (3, 1, 9) (7, 4, 8) (2, 5, 7) 

В случае списков с неравной длиной вы можете использовать itertools.izip_longest с fillvalue 0 – это в основном заполняет отсутствующие индексы с помощью 0 , позволяя вам суммировать все «столбцы»:

 In [1]: import itertools In [2]: l = [[3,7,2],[1,4],[9,8,7,10]] In [3]: [sum(i) for i in itertools.izip_longest(*l, fillvalue=0)] Out[3]: [13, 19, 9, 10] 

В этом случае, вот что будет выглядеть итерирование по izip_longest :

 In [4]: for i in itertools.izip_longest(*l, fillvalue=0): ...: print i ...: (3, 1, 9) (7, 4, 8) (2, 0, 7) (0, 0, 10) 

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

Образец для решения суммы массива вдоль оси, показанной в вашем вопросе, будет:

 >>> from numpy import array >>> data = array([[3,7,2], ... [1,4,5], ... [9,8,7]]) >>> from numpy import sum >>> sum(data, 0) array([13, 19, 14]) 

Вот документация numpy для его функции sum: http://docs.scipy.org/doc/numpy/reference/generated/numpy.sum.html#numpy.sum

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

Это даст вам сумму для каждого подсписок

 data = [[3,7,2],[1,4],[9,8,7,10]] list(map(sum, data)) [12, 5, 34] 

Если вы хотите суммировать все элементы и получить только одну сумму, используйте эту

 data = [[3,7,2],[1,4],[9,8,7,10]] sum(sum(data, [])) 51 
 >>> data = [[1, 2, 3], [1, 2, 3], [1, 2, 3]] >>> for column in enumerate(data[0]): ... count = sum([x[column[0]] for x in data]) ... print 'Column %s: %d' % (column[0], count) ... Column 0: 3 Column 1: 6 Column 2: 9 

Это зависит от вашего предположения, что все внутренние списки (или строки) имеют одинаковую длину, но они должны делать то, что вы хотите:

 sum_list = [] ncols = len(data[0]) for col in range(ncols): sum_list.append(sum(row[col] for row in data)) sum_list Out[9]: [13, 19, 14] 
 def sum(L): res = list() for j in range(0,len(L[0])): tmp = 0 for i in range(0,len(L)): tmp = tmp + L[i][j] res.append(tmp) return res 
  • Python, как получить сумму чисел в списке, в котором есть строки
  • Как проверить, успешно ли Paramiko успешно загрузил файл на SFTP-сервер?
  • Найти суммы диагоналей в numpy (быстрее)
  • Списки сумм различной длины
  • суммировать список чисел в Python
  • Избегание поведения по умолчанию для запуска Python
  • python суммирует значения списков списка
  • Как найти список в списке списков, сумма элементов которых наибольшая?
  • Сумма строк, извлекаемых из текстового файла с использованием regex
  • сумма python () и нецелые значения
  • Как бы я мог суммировать многомерный массив в наиболее сжатом python?
  •  
    Interesting Posts for Van-Lav

    Как агрегировать тайм-ауты в Python?

    Можно ли установить временной интервал для теста Селена?

    как собрать столбец DataFrame в пары ключевых значений как строку в python

    'TypeError: ufunc …' при использовании + = на массивах numpy

    Как сделать платежи по кредитным картам в Django?

    Простая байесовская сеть через сеть Монте-Карло Маркова портирована на PyMC3

    Передача функции с двумя аргументами для фильтра () в python

    Python urllib2> HTTP-прокси> запрос HTTPS

    Перечислять два списка python одновременно?

    Python, как я могу получить информацию о часовом поясе в django

    В 2013 году мне нужно использовать нос1 или нос2? Какое будущее носа?

    Добавление атрибутов к методам экземпляра в Python

    Загрузите несколько частей одного файла одновременно с Python?

    Анализ данных для создания объекта данных json с помощью Python

    autoreload и package, вызывающие TypeError: super (type, obj): obj должен быть экземпляром или подтипом типа

    Python - лучший язык программирования в мире.