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

pythonserver side programmingprogramming

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

示例

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

给定列表:
[10,12,14,16,18,20,22,24,26]

4 个连续数字的每个部分的平均值:

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

使用总和和范围

我们使用列表理解方法通过应用范围来计算连续数字的总和,以跟踪我们收集了多少个数字。然后我们用循环不断将和除以段长度。最后将结果收集到一个新的列表中。

示例

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

运行上述代码得到以下结果 −

给定列表:
   [10, 12, 14, 16, 18, 20, 22, 24, 26]
带有平均值的新列表:
   [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)

# 使用 islic 和 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]

相关文章