Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ค่าเฉลี่ยของแต่ละส่วนต่อเนื่องกันความยาว n ในรายการ Python


เรามีรายการที่มีเฉพาะตัวเลข เราวางแผนที่จะหาค่าเฉลี่ยของชุดตัวเลขที่เรียงตามลำดับจากรายการซึ่งจะเลื่อนจากหมายเลขแรกไปยังหมายเลขถัดไป จากนั้นจึงไปที่หมายเลขถัดไปเป็นต้น

ตัวอย่าง

ตัวอย่างด้านล่างช่วยลดความซับซ้อนของข้อกำหนดในการค้นหาค่าเฉลี่ยขององค์ประกอบที่ต่อเนื่องกัน 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]