Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Trung bình cộng mỗi đoạn liên tiếp n phần tử trong danh sách Python

Chúng ta có một danh sách chỉ chứa số. Mục tiêu là lấy trung bình của một tập hợp các số liên tiếp từ danh sách, trượt từ số đầu tiên sang số tiếp theo, và cứ thế.

Ví dụ

Ví dụ dưới đây đơn giản hóa yêu cầu tìm trung bình của mỗi 4 phần tử liên tiếp.

Danh sách cho trước: [10, 12, 14, 16, 18, 20, 22, 24, 26]
Trung bình mỗi đoạn 4 số liên tiếp: [13.0, 15.0, 17.0, 19.0, 21.0, 23.0]

Sử dụng sum và range

Sử dụng list comprehension để lấy tổng các số liên tiếp bằng cách áp dụng range để theo dõi số lượng phần tử đã thu thập. Sau đó chia tổng cho độ dài đoạn với vòng lặp. Kết quả được gom vào danh sách mới.

Ví dụ

listA = [10, 12, 14, 16, 18, 20, 22, 24, 26]
print("Danh sách cho trước:\n", listA)
seg = 4
res = [sum(listA[m:m + seg]) / seg for m in range(len(listA) - seg + 1)]
print("Danh sách mới với các trung bình:\n", res)

Kết quả

Danh sách cho trước: [10, 12, 14, 16, 18, 20, 22, 24, 26]
Danh sách mới với các trung bình: [13.0, 15.0, 17.0, 19.0, 21.0, 23.0]

Sử dụng islice và mean

Cách này sử dụng các module Python tính toán trực tiếp hơn. Cắt các phần tử của danh sách trong phạm vi cho trước bằng islice, sau đó áp dụng mean trực tiếp lên danh sách mới.

Ví dụ

from statistics import mean
from itertools import islice
listA = [10, 12, 14, 16, 18, 20, 22, 24, 26]
print("Danh sách cho trước:\n", listA)
listB = zip(*(islice(listA, i, None) for i in range(4)))
res = list(map(mean, listB))
print("Danh sách mới với các trung bình:\n", res)

Kết quả

Danh sách cho trước: [10, 12, 14, 16, 18, 20, 22, 24, 26]
Danh sách mới với các trung bình: [13, 15, 17, 19, 21, 23]