从for循环中获取平均值

时间:2016-03-31 15:29:26

标签: python python-2.7 for-loop

python相当新,我有一个类似于这的for循环(我不会包含内容,因为它们似乎无关紧要):

for i, (A, B) in enumerate(X):
    ...
    arbitrary calculations
    ...
    print s1
    print s2

这循环十次(虽然偶尔会有所不同),给出了s1的10个值和s2的10个值。有没有找到这些价值观的有效方法?

4 个答案:

答案 0 :(得分:2)

您需要将每个数字附加到列表中,或者在找到平均值之前即时添加它们。

使用列表:

s1_list = []
s2_list = []

for i, (A, B) in enumerate(X):
    ...
    arbitrary calculations
    ...
    s1_list.append(s1)
    s2_list.append(s2)

s1_mean = sum(s1_list)/float(len(s1_list))
s2_mean = sum(s2_list)/float(len(s2_list))

即时添加它们:

s1_total = 0
s2_total = 0

for i, (A, B) in enumerate(X):
    ...
    arbitrary calculations
    ...
    s1_total += s1
    s2_total += s2

s1_mean = s1_total/float(len(X))
s2_mean = s2_total/float(len(X))

使用float否则,如果是十进制数,则平均值将向下舍入。

答案 1 :(得分:1)

当然,你可以保存它们。

lst_s1, lst_s2 = [], []

for i, (A,B) in enumerate(X):
    ...
    lst_s1.append(s1)
    lst_s2.append(s2)
    print s1
    print s2

avg_s1 = sum(lst_s1) / len(lst_s1)
avg_s2 = sum(lst_s2) / len(lst_s2)

答案 2 :(得分:1)

我不会像在另一个答案中那样分配列表,只是在循环中求和,然后除以元素总数:

sum1 = 0
sum2 = 0
for i, (A, B) in enumerate(X):
    ...
    arbitrary calculations
    ...
    sum1 += s1
    sum2 += s2

n = i+1
print(sum1/n)
print(sum2/n)

如果列表变得更大,分配成本很高。

答案 3 :(得分:0)

尝试以下代码段来计算数组的平均值。底线是它不会导致溢出。

X = [9, 9, 9, 9, 9, 9, 9, 9]

factor = 1000000
xlen = len(X)

mean = (sum([float(x) / factor for x in X]) * factor) / xlen

print(mean)