Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 리스트에서 각 K 지점까지 그룹 합계 구하기

리스트에서 특정 키 값(K)을 만날 때마다 그룹별 누적 합계를 구해야 하는 경우가 있습니다. 이럴 때는 간단한 반복문(iteration)append 메서드를 활용하면 손쉽게 해결할 수 있습니다.

동작 원리

리스트의 요소를 하나씩 순회하면서 다음과 같은 규칙으로 처리합니다.

  • 현재 요소가 키 값과 다르면 → 합계에 계속 더합니다.
  • 현재 요소가 키 값과 같으면 → 지금까지 누적된 합계와 키 값을 결과 리스트에 저장한 뒤, 합계를 0으로 초기화합니다.

모든 순회가 끝나면 마지막으로 남아 있는 합계도 결과 리스트에 추가하여 완성합니다.

예제 코드

다음은 전체 과정을 보여주는 파이썬 코드입니다.

from collections import defaultdict

my_list = [21, 4, 37, 46, 7, 56, 7, 69, 2, 86, 1]

print("The list is :")
print(my_list)

my_key = 46
print("The key is ")
print(my_key)

my_sum = 0
my_result = []

for ele in my_list:
    if ele != my_key:
        my_sum += ele

    else:
        my_result.append(my_sum)
        my_result.append(ele)
        my_sum = 0

my_result.append(my_sum)

print("The resultant list is :")
print(my_result)

실행 결과

The list is :
[21, 4, 37, 46, 7, 56, 7, 69, 2, 86, 1]
The key is
46
The resultant list is :
[62, 46, 228]

코드 설명

  • 필요한 패키지(defaultdict)를 환경에 임포트합니다.
  • 합계를 구할 대상 리스트를 정의하고 콘솔에 출력합니다.
  • 기준이 되는 키 값(여기서는 46)을 정의하고 출력합니다.
  • 누적 합계를 담을 변수 my_sum을 0으로 초기화합니다.
  • 결과를 저장할 빈 리스트 my_result를 생성합니다.
  • 리스트를 순회하면서 요소가 키 값과 같지 않으면 합계에 더합니다.
  • 요소가 키 값과 같으면, 지금까지의 누적 합계와 해당 키 값을 결과 리스트에 차례로 추가합니다.
  • 그 후 합계를 다시 0으로 초기화하여 새로운 그룹의 합산을 시작합니다.
  • 순회가 끝난 뒤 마지막 그룹의 남은 합계도 결과 리스트에 추가합니다.
  • 최종 결과 리스트를 콘솔에 출력합니다.

결과 분석

예제에서 키 값 46 앞까지의 요소는 [21, 4, 37]로, 이들의 합은 62입니다. 그 뒤 키 값인 46이 저장되고, 나머지 요소 [7, 56, 7, 69, 2, 86, 1]의 합은 228이 됩니다. 따라서 최종 결과는 [62, 46, 228]입니다.

이 방식은 리스트를 한 번만 순회하므로 시간 복잡도는 O(n)으로 매우 효율적입니다. 로그 데이터를 구간별로 집계하거나, 특정 구분자를 기준으로 값을 묶어야 하는 다양한 상황에서 유용하게 활용할 수 있습니다.