假设我们在python中创建一个这样的列表:
[[1, 2, 3], [1, 3, 4], [2, 4, 5]]
然后我想取1+1+2
并除以3,给出该元素的平均值并存储在新列表中。我想再次为第二个元素做到这一点,最后为第三个元素做。如何简洁地做到这一点? (我想不出除了多个循环之外的其他方法。)
输出应该是新列表[(1+1+2), (2+3+4), (3+4+5)]
非常感谢!
答案 0 :(得分: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个元素。
当参数已经在列表或元组中但需要为需要单独位置参数的函数调用解包时...用* -operator编写函数调用以从列表或元组中解压缩参数。< / p>
>>> data
[[1, 2, 3], [1, 3, 4], [2, 4, 5]]
>>> zip(*data)
[(1, 1, 2), (2, 3, 4), (3, 4, 5)]
答案 1 :(得分: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]