假设我们在Python中创建了以下列表:
[[1, 2, 3], [1, 3, 4], [2, 4, 5]]
我想先将1+1+2
相加并除以3,得到该元素的平均值,并将其存储在一个新列表中。然后重复这个步骤,分别对第二个和第三个元素进行操作。有没有简洁的方法可以做到这一点?(我无法想到除了多个循环之外的其他方法)
输出应该是一个新列表[(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 个元素。
当参数已经在列表或元组中但需要分开作为函数调用的独立位置参数时...使用 * 运算符在函数调用中对列表或元组进行解包。
>>> 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