เรามี List ที่ประกอบด้วยตัวเลขเท่านั้น เราต้องการหาค่าเฉลี่ยของชุดตัวเลขที่ต่อเนื่องกันจาก List ซึ่งจะเลื่อนจากตัวแรกไปตัวถัดไป ต่อไปเรื่อยๆ
ตัวอย่าง
ตัวอย่างด้านล่างทำให้เข้าใจง่ายขึ้นสำหรับการหาค่าเฉลี่ยของแต่ละ 4 ตัวเลขที่ต่อเนื่องกันใน List
List ที่กำหนด: [10, 12, 14, 16, 18, 20, 22, 24, 26] ค่าเฉลี่ยของแต่ละส่วน 4 ตัวเลขติดกัน: [13.0, 15.0, 17.0, 19.0, 21.0, 23.0]
ใช้ sum และ range
เราใช้แนวคิด List Comprehension เพื่อหาผลรวมของตัวเลขที่ต่อเนื่องกัน โดยใช้ range ติดตามจำนวนตัวเลขที่รวบรวม แล้วหารผลรวมด้วยความยาวส่วน (segment length) ผลลัพธ์จะถูกรวบรวมใน List ใหม่
ตัวอย่าง
listA = [10, 12, 14, 16, 18, 20, 22, 24, 26]
print("List ที่กำหนด:\n", listA)
seg = 4
# List comprehension
res = [sum(listA[m:m + seg]) / seg
for m in range(len(listA) - seg + 1)]
print("List ใหม่พร้อมค่าเฉลี่ย:\n", res)
การรันโค้ดข้างต้นจะได้ผลดังนี้ −
List ที่กำหนด: [10, 12, 14, 16, 18, 20, 22, 24, 26] List ใหม่พร้อมค่าเฉลี่ย: [13.0, 15.0, 17.0, 19.0, 21.0, 23.0]
ใช้ islice และ mean
ในวิธีนี้เราใช้โมดูล Python ที่คำนวณค่าเหล่านี้ได้โดยตรงมากขึ้น เราตัดส่วน (slice) สมาชิกของ List ในช่วงที่กำหนดด้วยฟังก์ชัน islice จากนั้นใช้ฟังก์ชัน mean คำนวณค่าเฉลี่ยโดยตรง
ตัวอย่าง
from statistics import mean
from itertools import islice
listA = [10, 12, 14, 16, 18, 20, 22, 24, 26]
print("List ที่กำหนด:\n", listA)
# ใช้ islice และ mean
listB = zip(*(islice(listA, i, None) for i in range(4)))
res = list(map(mean, listB))
print("List ใหม่พร้อมค่าเฉลี่ย:\n", res)
ผลลัพธ์
การรันโค้ดข้างต้นจะได้ผลดังนี้ −
List ที่กำหนด: [10, 12, 14, 16, 18, 20, 22, 24, 26] List ใหม่พร้อมค่าเฉลี่ย: [13, 15, 17, 19, 21, 23]