6

Python で次のようなリストを作成するとします。

[[1, 2, 3], [1, 3, 4], [2, 4, 5]]

そして、それを1+1+23 で割って、その要素の平均を求め、新しいリストに格納します。2 番目の要素についても、最後に 3 番目の要素についても同じことをしたいと思います。どうすれば簡潔にできますか?(多重ループ以外の方法が思いつきません。)

出力は新しいリストでなければなりません[(1+1+2), (2+3+4), (3+4+5)]

本当にありがとう!

4

2 に答える 2

14

平均:

>>> data = [[1, 2, 3], [1, 3, 4], [2, 4, 5]]
>>> from __future__ import division
>>> [sum(e)/len(e) for e in zip(*data)]
 [1.3333333333333333, 3.0, 4.0]

合計:

>>> data = [[1, 2, 3], [1, 3, 4], [2, 4, 5]]
>>> [sum(e) for e in zip(*data)]
 [4, 9, 12]

タプルのリストを返します。i 番目のタプルには、各引数シーケンスまたはイテラブルの i 番目の要素が含まれます。

引数がすでにリストまたはタプルに含まれているが、個別の位置引数を必要とする関数呼び出しのためにアンパックする必要がある場合 ... リストまたはタプルから引数をアンパックするには、* 演算子を使用して関数呼び出しを記述します。

>>> data
 [[1, 2, 3], [1, 3, 4], [2, 4, 5]]

>>> zip(*data)
 [(1, 1, 2), (2, 3, 4), (3, 4, 5)]
于 2013-04-23T00:08:56.177 に答える
1
>>> l =  [[1, 2, 3], [1, 3, 4], [2, 4, 5]]
>>> zip(*l)
[(1, 1, 2), (2, 3, 4), (3, 4, 5)]
>>> def average(nums, default=float('nan')):
...   return sum(nums) / float(len(nums)) if nums else default
... 
>>> [average(n) for n in zip(*l)]
[2.0, 2.6666666666666665, 3.6666666666666665]
于 2013-04-23T00:10:11.563 に答える