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]
インデックスの範囲外エラーを取得せずにリストのリストを反復処理するにはどうすればよいですか?たぶんラムダ?ありがとう!
これを試すことができます:
_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)
_
マトリックス(またはその他の野心的な数値)操作については、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次元の配列の特定の軸のみ(など)。
これにより、各サブリストの合計が得られます
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
>>> 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
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())を実行すると、大きなリストのすべてのリストの合計が得られました。