6

假设我们在 python 中创建一个这样的列表:

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

然后我想取1+1+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 个元素。

当参数已经在列表或元组中但需要为需要单独的位置参数的函数调用解包时......使用 *-operator 编写函数调用以将参数从列表或元组中解包出来。

>>> 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 回答