【问题标题】:How do I write a function that takes the average of a list of numbers如何编写一个取数字列表平均值的函数
【发布时间】:2014-09-29 22:37:31
【问题描述】:

我想避免导入不同的模块,因为这主要是我在网上查找时发现的。我被这段代码困住了,我真的不知道如何修复或改进它。这是我到目前为止所得到的。

def avg(lst):
    '''lst is a list that contains lists of numbers; the
    function prints, one per line, the average of each list'''
    for i[0:-1] in lst:
        return (sum(i[0:-1]))//len(i)

再一次,我很新,这个 for 循环行话让我很困惑,所以如果有人可以帮助我得到它,那么例如成绩列表的输出将是包含平均值的不同行。因此,如果我为lst 插入grades = [[95,92,86,87], [66,54], [89,72,100], [33,0,0]],它将有 4 行都具有这些子列表的平均值。我还要在函数中假设子列表可以有任意数量的等级,但我可以假设列表具有非零值。

Edit1:@jramirez,你能解释一下它的作用与我的不同吗?我不怀疑它会更好或者它会起作用,但我仍然不明白如何自己重新创建它......无论如何,谢谢。

【问题讨论】:

    标签: function for-loop python-3.x average


    【解决方案1】:

    我想这就是你想要的:

    def grade_average(grades):
        for grade in grades:
            avg = 0
            for num in grade:
                avg += num
    
            avg = avg / len(grade)
    
            print ("Average for " + str(grade) + " is = " + str(avg))
    
    if __name__ == '__main__':
        grades = [[95,92,86,87],[66,54],[89,72,100],[33,0,0]]    
        grade_average(grades)
    

    结果:

    Average for [95, 92, 86, 87] is = 90.0

    Average for [66, 54] is = 60.0

    Average for [89, 72, 100] is = 87.0

    Average for [33, 0, 0] is = 11.0

    【讨论】:

      【解决方案2】:

      您的代码存在问题:i 的无关索引;使用// 截断他的平均值(如果你想四舍五入,请使用round);并在循环中使用 return ,因此它将在第一次平均后停止。您的文档字符串说“打印”,但您返回。这实际上是一件好事。函数不应打印它们计算的结果,因为这会使答案无法进一步计算。以下是我将如何编写它,作为生成器函数。

      def averages(gradelists):
      '''Yield average for each gradelist.'''
      for glist in gradelists:
          yield sum(glist) /len(glist)
      
      print(list(averages(
              [[95,92,86,87], [66,54], [89,72,100], [33,0,0]])))
      

      [90.0, 60.0, 87.0, 11.0]

      要返回一个列表,请将函数的主体更改为(初级版)

      ret = []
      for glist in gradelists:
          ret.append(sum(glist) /len(glist))
      return ret
      

      或(更高级,使用列表理解)

      return [sum(glist) /len(glist) for glist in gradelists]
      

      但是,我真的建议学习迭代器、生成器和生成器函数(使用 yield 定义)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-22
        • 2023-03-10
        • 2020-12-27
        • 1970-01-01
        相关资源
        最近更新 更多