きりがないので,これで止める。
R でもそうだけど,for を使ったところは,使わないように書き換えるのが吉。
単に行数が短くなると言うことではなく,その方が効率的だから。
Java や JavaScript, C, C++ 古くは FORTRAN などの経験者はどうしても自分の経験から for ループを使ったコードを,「安易に」書いてしまう。
R や Python はそれを実現する,1つの関数を持っている。それを使うべし。
for を多用している Python プログラムは,「参考にしてはならない!!」
旧人類の真似をしてるうちは,新人類にはなれませんっ!
ベテランは,自己の経験に基づくのではなく,Python ではどのように書くのが「普通か」ということを探索すべし。自分ほど経験豊富なプログラマ(エッヘン)は何でもプログラムできるからと言って,旧来の for ループでなんでもかんでも書くというのは,止めるべし。
import math
data = [66, 59, 62, 64, 63,
68, 65, 59, 68, 64,
65, 51, 67, 64, 83,
59, 61, 62, 57, 72,
65, 64, 54, 60, 53,
65, 67, 60, 53, 79,
74, 53, 61, 68, 75,
50, 57, 55, 66, 56,
55, 61, 70, 71, 49,
69, 70, 80, 73, 72]
n = len(data) # The number of scores
print("n = %d" % n)
# print("Data...")
# i = 1
# for x in data:
# print("%5d:"%i + " %f"%x)
# i+=1
# sum = 0.0
# for x in data:
# sum += x
# mean = sum / n
mean = sum(data) / n
print("Mean = %g" % mean)
#ssum = 0.0
#for x in data:
# ssum += sqr(x - mean)
# var = ssum / n
var = sum((x - mean)**2 for x in data) / n
sd = math.sqrt(var)
# print("Variance = %f"%var + " sd = %f"%sd)
print("Variance = %g sd = %g" % (var, sd))
# uvar = ssum / (n - 1.0)
uvar = var * n / (n - 1)
sd_uvar = math.sqrt(uvar)
# print("Unbiased Var. = %f"%uvar + " sd(uvar) = %f"%sd_uvar)
print("Unbiased Var. = %g sd(uvar) = %g" % (uvar, sd_uvar))