import math def average(values): "Compute the average and standard deviation of a list of numbers" sum = 0.0 # Note that we start with floating point number squaredSum = 0.0 for v in values: sum += v squaredSum += v * v avg = sum / len(values) squaredAvg = squaredSum / len(values) variance = squaredAvg - avg * avg stdDev = math.sqrt(variance) return avg, stdDev class Data: "Computes statistics for a list of values." def __init__(self, values=[]): "Initialize accumulators and add in initial values." self.sum = 0.0 self.squaredSum = 0.0 self.count = 0 for v in values: self.addValue(v) def addValue(self, v): self.sum += v self.squaredSum += v * v self.count += 1 def average(self): return self.sum / self.count def variance(self): avg = self.average() return self.squaredSum / self.count - avg * avg def standardDeviation(self): return math.sqrt(self.variance()) if __name__ == "__main__": values = [4, 9, 11, 12, 17, 5, 8, 12, 14] print average(values) s = Data(values) print s.average(), s.variance(), s.standardDeviation() #print average([1.0, 2.0, 3.0, 2.0, 1.0]) #print average([1.0, 20.0, 30.0, 1.0, 1.0])