說我們在Python創建一個列表,像這樣:想找到做多列出的平均的方式
[[1, 2, 3], [1, 3, 4], [2, 4, 5]]
然後我想3採取1+1+2
和鴻溝,讓我平均爲元素並存儲在新列表中。我想再次爲第二個元素做,最後是第三個元素。如何簡潔地做到這一點? (我想不出比多環以外的方式。)
輸出應該是一個新的列表[(1+1+2), (2+3+4), (3+4+5)]
非常感謝!
說我們在Python創建一個列表,像這樣:想找到做多列出的平均的方式
[[1, 2, 3], [1, 3, 4], [2, 4, 5]]
然後我想3採取1+1+2
和鴻溝,讓我平均爲元素並存儲在新列表中。我想再次爲第二個元素做,最後是第三個元素。如何簡潔地做到這一點? (我想不出比多環以外的方式。)
輸出應該是一個新的列表[(1+1+2), (2+3+4), (3+4+5)]
非常感謝!
平均值:
>>> 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個元素。
時的參數已經在列表或元組,但需要解壓函數調用需要單獨的位置參數...寫的函數調用與* -operator將參數從列表或元組中解開。
>>> data
[[1, 2, 3], [1, 3, 4], [2, 4, 5]]
>>> zip(*data)
[(1, 1, 2), (2, 3, 4), (3, 4, 5)]
>>> 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]
我想你想'的可能重複zip(* l)'在你的最後一行。否則,你只是平均每個子列表(所以你得到2,2-2/3和3-2/3而不是1-1/3,3和4)。 – abarnert 2013-04-23 00:16:11
[平均名單蟒蛇列表](http://stackoverflow.com/questions/10919664/averaging-list-of-lists-python) – 2015-05-11 19:19:22