Подтвердить что ты не робот

Как я могу суммировать столбец списка?

У меня есть массив Python, например:

[[1,2,3],
 [1,2,3]]

Я могу добавить строку, выполнив sum(array[i]), как я могу суммировать столбец, используя цикл double для цикла?

т.е. для первого столбца я мог бы получить 2, затем 4, затем 6.

4b9b3361

Ответ 1

Использование цикла for (в выражении генератора):

data = [[1,2,3],
        [1,2,3]]

column = 1
print(sum(row[column] for row in data))  # -> 4

Ответ 3

Вам не нужен цикл, используйте zip() для переноса списка, затем возьмите нужный столбец:

sum(list(zip(*data)[i]))

(Примечание в 2.x, zip() возвращает список, поэтому вам не нужен вызов list()).

Изменить: простейшим решением этой проблемы без использования zip(), вероятно, будет:

column_sum = 0
for row in data:
    column_sum += row[i]

Мы просто прокручиваем строки, беря элемент и добавляем его к нашей общей сумме.

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

Ответ 4

[sum(row[i] for row in array) for i in range(len(array[0]))]

Это должно сделать это. len(array[0]) - количество столбцов, поэтому i выполняет итерации. Выражение генератора row[i] for row in array проходит через все строки и выбирает один столбец для каждого номера столбца.

Ответ 5

Я думаю, что самый простой способ:

sumcolumn=data.sum(axis=0)

print (sumcolumn)

Ответ 6

вы можете использовать zip():

In [16]: lis=[[1,2,3],
   ....:  [1,2,3]]

In [17]: map(sum,zip(*lis))
Out[17]: [2, 4, 6]

или с простыми для циклов:

In [25]: for i in xrange(len(lis[0])):
    summ=0
    for x in lis:
        summ+=x[i]
    print summ
   ....:     
2
4
6

Ответ 7

Вам может быть интересно numpy, у которого есть более сложные функции массива. Один из них состоит в том, чтобы легко суммировать столбец:

from numpy import array

a = array([[1,2,3],
 [1,2,3]])

column_idx = 1
a[:, column_idx].sum() # ":" here refers to the whole array, no filtering.

Ответ 8

Вы можете использовать numpy:

import numpy as np
a = np.array([[1,2,3],[1,2,3]])
a.sum(0)