Python表示列表子集

时间:2016-03-17 23:43:27

标签: python list list-comprehension

我想从列表中获取资产清单。为了演示,在我的示例中,我有名为listA的列表。

listA = [1,7,8,9,0,7,8,9,9,3,5,3,4,5,3]

现在我想用另一个列表创建一个平均值列表,我必须指定我想要取的平均值的索引范围。我使用indexmeans来做到这一点:

indexmeans = [3, 4,3,5]

所以我想要的手段列表将采用第一个' 3' listA的数量,平均值为5.333。然后我在那之后拿出4个数字[9,0,7,8]并取其平均值给出我的平均值6.依此类推......所有数字都应该用作总和(indexmeans) = len(listA)

means = [ 5.333, 6, 7, 4]

2 个答案:

答案 0 :(得分:2)

我会使用scipy.cumsum来保留累积的索引列表。然后你可以zip该列表找到相应的起始和结束索引,同时将0添加到第一个起始索引的前面。鉴于这些,您可以使用numpy.mean来计算每个切片的平均值。

>>> from numpy import mean
>>> from scipy import cumsum
>>> indexes = cumsum([0] + indexmeans)
>>> [mean(listA[i:j]) for i,j in zip(indexes[:-1], indexes[1:])]
[5.333333333333333, 6.0, 7.0, 4.0]

答案 1 :(得分:1)

以下是使用标准库的方法。

from __future__ import division

lst = [1,7,8,9,0,7,8,9,9,3,5,3,4,5,3]
indexmeans = [3, 4,3,5]
assert sum(indexmeans) == len(lst)

lst_copy = lst[:]
means = [sum(lst_copy.pop(0) for _ in range(i)) / i for i in indexmeans]