Python 如何计算列表中索引值的总和和平均值?
列表B在索引位置展开,其中列表A具有相邻的匹配值,使用 因此,结果列表是:Python 如何计算列表中索引值的总和和平均值?,python,python-2.7,Python,Python 2.7,列表B在索引位置展开,其中列表A具有相邻的匹配值,使用 因此,结果列表是: B_update1 = [0,4,10,10,15,15] 经过一些中间步骤后,将: B_update2 = [0,4,12,10,20,20] 现在我想取重复值的总和和平均值,它将返回给我: B_mean = [0,4,11,20] B_sum = [0,4,22,40] 我不知道怎么做。有什么建议吗 B_update1, B_update2, B_mean, B_sum = [0,4,10,10,15,15],
B_update1 = [0,4,10,10,15,15]
经过一些中间步骤后,将:
B_update2 = [0,4,12,10,20,20]
现在我想取重复值的总和和平均值,它将返回给我:
B_mean = [0,4,11,20]
B_sum = [0,4,22,40]
我不知道怎么做。有什么建议吗
B_update1, B_update2, B_mean, B_sum = [0,4,10,10,15,15], [0,4,12,10,20,20], [],[]
from itertools import groupby
from operator import itemgetter
for num, grp in groupby(enumerate(B_update1), itemgetter(1)):
tmp_list = [B_update2[idx] for idx, _ in grp]
B_mean.append(sum(tmp_list)/len(tmp_list))
B_sum.append(sum(tmp_list))
print B_mean, B_sum
输出
[0, 4, 11, 20] [0, 4, 22, 40]
您需要的基本信息是重复次数:
>>> A = [476, 1440, 3060, 3060, 500, 500]
>>> B = [0, 4, 10, 15]
>>> repetitions = [len(list(g)) for n, g in groupby(A)]
>>> repetitions
[1, 1, 2, 2]
由此,您可以构造B_update1
并返回到简单列表:
>>> B_update1 = []
>>> for i, r in enumerate(repetitions):
B_update1.extend([B[i]] * r)
>>> B_update1
[0, 4, 10, 10, 15, 15]
>>> B_update2 = [0, 4, 12, 10, 20, 20] # MAGIC
>>> B_sum, B_mean = [], []
>>> i = 0
>>> for r in repetitions:
s = sum(B_update2[i:i + r])
B_sum.append(s)
B_mean.append(s / r)
i += r
>>> B_sum
[0, 4, 22, 40]
>>> B_mean
[0.0, 4.0, 11.0, 20.0]
重复值的平均值不总是原始值吗?它们会在原始列表中保持不变,但在新列表中会被更改吗?请解释一下。你能展示一下你是如何从
A
和B
创建B\u更新的的吗
>>> B_update1 = []
>>> for i, r in enumerate(repetitions):
B_update1.extend([B[i]] * r)
>>> B_update1
[0, 4, 10, 10, 15, 15]
>>> B_update2 = [0, 4, 12, 10, 20, 20] # MAGIC
>>> B_sum, B_mean = [], []
>>> i = 0
>>> for r in repetitions:
s = sum(B_update2[i:i + r])
B_sum.append(s)
B_mean.append(s / r)
i += r
>>> B_sum
[0, 4, 22, 40]
>>> B_mean
[0.0, 4.0, 11.0, 20.0]