code: def lF_oneway(*lists):
      
      a = len(lists)           # ANOVA on 'a' groups, each in it's own list
      means = [0]*a
      vars = [0]*a
      ns = [0]*a
      alldata = []
      tmp = [N.array(_) for _ in lists]
      means = [amean(_) for _ in tmp]
      vars = [avar(_) for _ in tmp]
      ns = [len(_) for _ in lists]
      for i in range(len(lists)):
          alldata = alldata + lists[i]
      alldata = N.array(alldata)
      bign = len(alldata)
      sstot = ass(alldata)-(asquare_of_sums(alldata)/float(bign))
      ssbn = 0
      for list in lists:
          ssbn = ssbn + asquare_of_sums(N.array(list))/float(len(list))
      ssbn = ssbn - (asquare_of_sums(alldata)/float(bign))
      sswn = sstot-ssbn
      dfbn = a-1
      dfwn = bign - a
      msb = ssbn/float(dfbn)
      msw = sswn/float(dfwn)
      f = msb/msw
      prob = fprob(dfbn,dfwn,f)
      return f, prob
docs: Performs a 1-way ANOVA, returning an F-value and probability given
  any number of groups.  From Heiman, pp.394-7.
  
  Usage:   F_oneway(*lists)    where *lists is any number of lists, one per
                                    treatment group
  Returns: F value, one-tailed p-value