เรามีรายการที่มีเฉพาะตัวเลข เราวางแผนที่จะหาค่าเฉลี่ยของชุดตัวเลขที่เรียงตามลำดับจากรายการซึ่งจะเลื่อนจากหมายเลขแรกไปยังหมายเลขถัดไป จากนั้นจึงไปที่หมายเลขถัดไปเป็นต้น
ตัวอย่าง
ตัวอย่างด้านล่างช่วยลดความซับซ้อนของข้อกำหนดในการค้นหาค่าเฉลี่ยขององค์ประกอบที่ต่อเนื่องกัน 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]
ด้วยผลรวมและช่วง
เราใช้วิธีการทำความเข้าใจรายการเพื่อหาผลรวมของตัวเลขที่ต่อเนื่องกันโดยใช้ช่วงเพื่อติดตามจำนวนตัวเลขที่เรารวบรวมได้ จากนั้นเราทำการหารผลรวมด้วยความยาวของส่วนโดยใช้ลูป ในที่สุดผลลัพธ์ก็ถูกรวบรวมเป็นรายการใหม่
ตัวอย่าง
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 และใจร้าย
ในแนวทางนี้ เราใช้โมดูลหลามซึ่งสามารถคำนวณค่าเหล่านี้ได้โดยตรงมากขึ้น เราแบ่งองค์ประกอบต่างๆ ของรายการในช่วงที่กำหนดโดยใช้ฟังก์ชัน isslice จากนั้นจึงนำฟังก์ชันค่าเฉลี่ยไปใช้กับรายการใหม่โดยตรงเพื่อให้ได้ผลลัพธ์สุดท้าย
ตัวอย่าง
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]