Computer >> Máy Tính >  >> Lập trình >> Python

Giá trị trung bình của mỗi đoạn liên tiếp có độ dài n trong danh sách Python

Chúng tôi có một danh sách chỉ chứa các con số. Chúng tôi dự định lấy giá trị trung bình của một tập hợp các số liên tiếp từ danh sách. Danh sách này tiếp tục cuộn từ số đầu tiên đến số tiếp theo rồi đến số tiếp theo, v.v.

Ví dụ

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

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]

Với tổng và phạm vi

Chúng tôi sử dụng phương pháp hiểu danh sách để lấy tổng các số liên tiếp bằng cách áp dụng phạm vi để theo dõi số lượng chúng tôi thu thập được. Sau đó, chúng tôi tiếp tục chia tổng với độ dài đoạn với sự trợ giúp của một vòng lặp. Cuối cùng, kết quả được tập hợp vào một danh sách mới.

Ví dụ

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)

Chạy đoạn mã trên cho chúng ta kết quả sau -

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]

Với islice và mean

Trong cách tiếp cận này, chúng tôi sử dụng sự trợ giúp của các mô-đun python có thể tính toán các giá trị này theo cách trực tiếp hơn. Chúng tôi tiếp tục cắt các phần tử của danh sách trong phạm vi đã cho bằng cách sử dụng hàm Isslice và sau đó áp dụng hàm trung bình trực tiếp trên danh sách mới để nhận được kết quả cuối cùng.

Ví dụ

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)

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

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