web-dev-qa-db-ja.com

リストのリストの合計。合計リストを返します

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]

インデックスの範囲外エラーを取得せずにリストのリストを反復処理するにはどうすればよいですか?たぶんラムダ?ありがとう!

23
Albert

これを試すことができます:

_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_を_0_のfillvalueとともに使用できます-これは基本的に、欠落しているインデックスを_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)
_
63
RocketDonkey

マトリックス(またはその他の野心的な数値)操作については、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])

Sum関数に関するnumpyのドキュメントは次のとおりです。 http://docs.scipy.org/doc/numpy/reference/generated/numpy.sum.html#numpy.sum

特に、2番目の引数は、要約する対象を簡単に指定できるため、興味深いものです。すべての要素、または潜在的にn次元の配列の特定の軸のみ(など)。

11
Theuni

これにより、各サブリストの合計が得られます

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

すべての要素を合計して、合計を1つだけ取得する場合は、これを使用します

data = [[3,7,2],[1,4],[9,8,7,10]]
sum(sum(data, []))
51
10
MySchizoBuddy
>>> 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
2
Natan

これは、すべての内部リスト(または行)が同じ長さであるという前提に依存しますが、必要なことを行う必要があります。

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]
0
Marius
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
0
user3481919
numArr = [[12, 4], [1], [2, 3]]

sumArr = 0

sumArr = sum(sum(row) for row in numArr)

print(sumArr) 

the answere: 22

私がやったこと:たとえば、[for。]のようにすると、[row.append(1)for row in numArr]リストは[[12、4、1]、[1、1]、[2 ] sum(sum())を実行すると、大きなリストのすべてのリストの合計が得られました。

0