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.