리스트의 양 끝에서 일부 요소를 잘라낸(절사한) 뒤, 잘라낸 값들의 합을 남은 요소들에 균등하게 재분배해야 하는 경우가 있습니다. 파이썬에서는 슬라이싱, 리스트 컴프리헨션(list comprehension), 그리고 나눗셈 연산자 '/'를 조합하면 이 작업을 간단하게 처리할 수 있습니다.
예제 코드
아래는 절사된 값을 재분배하는 방법을 보여주는 예제입니다.
my_list = [11, 26, 24, 75, 96, 37, 48, 29, 93]
print("The list is :")
print(my_list)
key = 2
print("The value of key is")
print(key)
full_sum = sum(my_list)
trimmed_list = my_list[key:len(my_list) - key]
trim_sum = sum(trimmed_list)
add_value = (full_sum - trim_sum) / len(trimmed_list)
result = [ele + add_value for ele in trimmed_list]
print("The resultant list is:")
print(result)
출력 결과
The list is : [11, 26, 24, 75, 96, 37, 48, 29, 93] The value of key is 2 The resultant list is: [55.8, 106.8, 127.8, 68.8, 79.8]
단계별 동작 원리
- 리스트를 정의하고 콘솔에 출력합니다.
- 절사할 개수를 나타내는 key 값을 정의하고 콘솔에 출력합니다.
- 'sum()' 메서드로 리스트 전체 요소의 합을 구해 변수에 저장합니다.
- 슬라이싱 'my_list[key:len(my_list) - key]'를 사용해 앞뒤로 key개씩 제외한 중간 요소들만 추출합니다.
- 절사된 리스트의 합 역시 'sum()'으로 구해 변수에 저장합니다.
- '/' 연산자로 재분배할 값을 계산합니다. 즉, (전체 합 − 절사된 리스트의 합) ÷ 절사된 리스트의 길이입니다.
- 리스트 컴프리헨션을 사용해 절사된 리스트의 각 요소에 계산된 값을 더합니다.
- 결과 리스트를 변수에 할당한 뒤 콘솔에 출력합니다.
핵심 로직 정리
예제의 숫자를 기준으로 계산 과정을 살펴보면 다음과 같습니다.
- 전체 합: full_sum = 439
- 절사된 리스트: key가 2이므로 앞의 [11, 26]과 뒤의 [29, 93]을 제외한 [24, 75, 96, 37, 48]이 남습니다.
- 절사된 리스트의 합: trim_sum = 280
- 재분배할 값: (439 − 280) ÷ 5 = 31.8
- 결과: 각 요소에 31.8을 더한 [55.8, 106.8, 127.8, 68.8, 79.8]이 출력됩니다.
결국 잘라낸 요소들의 합(159)이 남은 요소 5개에 각각 31.8씩 균등하게 나누어 더해지는 구조입니다. 이처럼 슬라이싱과 리스트 컴프리헨션을 함께 활용하면 복잡한 반복문 없이도 간결하게 데이터를 가공할 수 있습니다.