【问题标题】:Python: How to find the average on each array in the list?Python:如何找到列表中每个数组的平均值?
【发布时间】:2018-03-16 15:36:52
【问题描述】:

假设我有一个包含三个数组的列表,如下所示:

[(1,2,0),(2,9,6),(2,3,6)]

我是否有可能通过遍历列表中数组的每个“槽”来获得平均值。 例如:

(1+2+2)/3, (2+0+9)/3, (0+6+6)/3

并使其成为只有 3 个整数的新数组列表。

【问题讨论】:

  • 您在哪个部分遇到了问题? sumlen 函数使这变得非常简单。
  • @PatrickHaugh 对不起,我解释得不好。sumlen 函数很容易找出列表中每个数组的平均值。但我想要的是数组每个插槽的平均值。即时,average of all array(0), array(1) and, array(2)。我希望这是可以理解的。
  • 糟糕,这是我的错,我应该更仔细地阅读。您可以为此使用zip

标签: python-3.x list arraylist average


【解决方案1】:

您可以使用zip 通过索引关联每个内部元组中的所有元素

tups = [(1,2,0),(2,9,6),(2,3,6)]
print([sum(x)/len(x) for x in zip(*tups)])
# [1.6666666666666667, 4.666666666666667, 4.0]

您还可以在列表推导式中执行sum(x)//len(x)round(sum(x)/len(x)) 之类的操作来获取整数。

【讨论】:

    【解决方案2】:

    这里有几种方法可以做到。

    data = [(1,2,0),(2,9,6),(2,3,6)]
    avg_array = []
    for tu in data:
        avg_array.append(sum(tu)/len(tu))
    print(avg_array)
    

    使用列表理解

    data = [(1,2,0),(2,9,6),(2,3,6)]
    comp = [ sum(i)/len(i) for i in data]
    print(comp)
    

    【讨论】:

      【解决方案3】:

      可以通过这样做来实现。

      创建一个空数组。遍历当前数组并使用 sum 和 len 函数计算平均值。然后将平均值附加到新数组中。

      array = [(1,2,0),(2,9,6),(2,3,6)]
      arraynew = []
      
      for i in range(0,len(array)):
          arraynew.append(sum(array[i]) / len(array[i]))
      
      print arraynew   
      

      【讨论】:

      • TypeError: 'int' object is not iterable :(
      • 代码在我使用 Python v2.7.13 和 v3.6.2 时运行良好。
      【解决方案4】:

      正如您在 sumlen 的 cmets 中所说的那样,这很容易。

      但是在 python 中我会做这样的事情,假设你想保持小数精度:

      list = [(1, 2, 0), (2, 9, 6), (2, 3, 6)]
      res = map(lambda l: round(float(sum(l)) / len(l), 2), list)
      

      输出:

      [1.0, 5.67, 3.67]
      

      但正如你所说,你想要 3 ints 在你的问题中,会是这样的:

      res = map(lambda l: sum(l) / len(l), list)
      

      输出:

      [1, 5, 3]
      

      编辑:

      要对每个元组的相同索引求和,最优雅的方法是@PatrickHaugh 提供的解决方案。

      另一方面,如果您不喜欢列表推导式和像zip 这样的一些内置函数,这里有一个更长且不太优雅的版本,使用for 循环:

      arr = []
      for i in range(0, len(list)):
          arr.append(sum(l[i] for l in list) / len(list))
      print(arr)
      

      输出:

      [1, 4, 4]
      

      【讨论】:

      • 嗨,对不起,我的解释很糟糕。我的目的是获得数组每个插槽的平均值。瞬间,所有数组(0),数组(1)和数组(2)的平均值。我希望这是可以理解的
      • @Icc 我不知道我是否正确理解了您的需求,但我猜您将每个元组 (1, 2, 0) 解释为必须平均的数组。或者您是在询问每个元组的第一个位置的平均值,例如(1, 2, 0) => 1 / (2, 9, 6) => 2 等等?
      • (1,2,2), (2,9,3), (0,6,6) 代替。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 2021-03-01
      • 2022-01-16
      • 1970-01-01
      相关资源
      最近更新 更多