python相当新,我有一个类似于这的for循环(我不会包含内容,因为它们似乎无关紧要):
for i, (A, B) in enumerate(X):
...
arbitrary calculations
...
print s1
print s2
这循环十次(虽然偶尔会有所不同),给出了s1的10个值和s2的10个值。有没有找到这些价值观的有效方法?
答案 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)