Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python 목록의 각 n 길이 연속 세그먼트의 평균

<시간/>

숫자만 포함된 목록이 있습니다. 첫 번째 숫자에서 다음 숫자로, 그리고 다음 숫자로 계속 이동하는 목록에서 일련의 숫자 집합의 평균을 얻을 계획입니다.

예시

아래 예는 목록의 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]

섬과 평균

이 접근 방식에서 우리는 보다 직접적인 방식으로 이러한 값을 계산할 수 있는 python 모듈의 도움을 받습니다. 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]