Python 列表中每个 n 长度的连续片段的平均值


我们有一个只包含数字的列表。我们计划获取列表中一组连续数字的平均值,这些数字从第一个数字开始,然后滚动到下一个数字,再到下一个数字,依此类推。

示例

下面的示例简化了查找列表中每个 4 个长度的连续元素的平均值的需要。

Given list:
[10,12,14,16,18,20,22,24,26]

Average of every segment of 4 consecutive numbers:

[13.0, 15.0, 17.0, 19.0, 21.0, 23.0]

使用 sum 和 range

我们使用列表推导式方法通过应用 range 来获取连续数字的总和,以跟踪我们收集了多少个数字。然后,我们借助循环将总和除以段长度。最后,结果被收集到一个新的列表中。

示例

 在线演示

listA = [10,12,14,16,18,20,22,24,26]
print("Given list:\n",listA)
seg = 4
# List comprehension
res = [sum(listA[m:m + seg])/seg
      for m in range(len(listA) - seg + 1)]
print("new list with averages:\n ",res)

运行以上代码,我们得到以下结果:

Given list:
   [10, 12, 14, 16, 18, 20, 22, 24, 26]
new list with averages:
   [13.0, 15.0, 17.0, 19.0, 21.0, 23.0]

使用 islice 和 mean

在这种方法中,我们借助 Python 模块,这些模块可以更直接地计算这些值。我们使用 isslice 函数在给定范围内对列表的元素进行切片,然后直接对新列表应用 mean 函数以获得最终结果。

示例

 在线演示

from statistics import mean
from itertools import islice

listA = [10,12,14,16,18,20,22,24,26]
print("Given list:\n",listA)

# With islice and mean
listB = zip(*(islice(listA, i, None) for i in range(4)))
res = list(map(mean, listB))

print("new list with averages:\n ",res)

输出

运行以上代码,我们得到以下结果:

Given list:
   [10, 12, 14, 16, 18, 20, 22, 24, 26]
new list with averages:
   [13, 15, 17, 19, 21, 23]

更新时间: 2020年7月22日

276 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.