데이터 분석을 하다 보면 리스트의 각 요소에 특정 값을 더해서 새로운 시나리오를 시뮬레이션해야 하는 경우가 자주 발생합니다. 예를 들어, 데이터셋의 모든 값에 일정한 가중치를 적용했을 때 결과가 어떻게 달라지는지 확인하거나, 다양한 조건에서 모델과 알고리즘이 어떻게 동작하는지 테스트할 수 있습니다. 이 글에서는 Python 리스트의 각 요소에 값을 더하는 대표적인 세 가지 방법을 소개합니다.
1. 리스트 컴프리헨션(List Comprehension) 사용
리스트 컴프리헨션은 Python에서 리스트를 다루는 가장 기본적이면서도 직관적인 방법입니다. for 루프를 한 줄로 압축하여 각 요소를 순회하면서 원하는 연산을 바로 적용할 수 있어, 코드가 간결하고 가독성이 뛰어납니다.
예제
orig_list = [5, 6, 7, 4, 10]
print("원본 리스트 : " + str(orig_list))
# 리스트 컴프리헨션으로 각 요소에 5 더하기
new_list = [n + 5 for n in orig_list]
# 결과 출력
print("각 요소에 5를 더한 후 : " + str(new_list))실행 결과
원본 리스트 : [5, 6, 7, 4, 10] 각 요소에 5를 더한 후 : [10, 11, 12, 9, 15]
위 코드처럼 [n + 5 for n in orig_list] 한 줄이면 리스트 전체 요소에 5가 더해집니다. 소규모 데이터나 간단한 변환 작업에 가장 널리 사용되는 방식입니다.
2. lambda와 map() 조합 사용
map() 함수와 람다(lambda) 함수를 조합하면 함수형 프로그래밍 스타일로 같은 결과를 얻을 수 있습니다. 람다 함수는 지정된 횟수만큼 반복적으로 동일한 연산을 수행하고, map()은 모든 반복이 끝난 후의 결과를 한 번에 모아줍니다.
예제
orig_list = [5, 6, 7, 4, 10]
print("원본 리스트 : " + str(orig_list))
# map() + lambda로 각 요소에 3 더하기
new_list = list(map(lambda m: m + 3, orig_list))
print("각 요소에 3을 더한 후 : " + str(new_list))실행 결과
원본 리스트 : [5, 6, 7, 4, 10] 각 요소에 3을 더한 후 : [8, 9, 10, 7, 13]
map(lambda m: m + 3, orig_list)는 각 요소에 대해 m + 3 연산을 적용하며, 최종적으로 list()로 감싸서 결과를 리스트 형태로 변환합니다.
3. map()과 operator.add() 조합 사용
람다 연산자 대신 operator.add 메서드를 map()과 함께 사용할 수도 있습니다. 이 방법은 원본 리스트와 같은 길이의 새로운 리스트를 만들고, 그 안에 더하고 싶은 값으로 채운 뒤 두 리스트를 요소별로 더하는 방식입니다.
예제
import operator
orig_list = [5, 6, 7, 4, 10]
print("원본 리스트 : " + str(orig_list))
# 더할 값으로 채워진 새 리스트 생성
list_with_k_value = [9] * len(orig_list)
# map() + operator.add로 두 리스트를 요소별로 더하기
new_list = list(map(operator.add, orig_list, list_with_k_value))
print("각 요소에 9를 더한 후 : " + str(new_list))실행 결과
원본 리스트 : [5, 6, 7, 4, 10] 각 요소에 9를 더한 후 : [14, 15, 16, 13, 19]
[9] * len(orig_list)는 리스트 곱셈 연산을 활용해 원본 리스트와 길이가 같은 리스트를 손쉽게 생성하는 유용한 기법입니다. 이후 map(operator.add, ...)가 두 리스트의 대응하는 요소들을 하나씩 더해 줍니다.
마무리
세 가지 방법 모두 리스트의 각 요소에 값을 더하는 동일한 목적을 달성하지만, 상황에 따라 적합한 선택이 달라집니다. 간단한 변환에는 리스트 컴프리헨션이 가독성 면에서 우수하고, 함수형 스타일을 선호한다면 lambda + map(), 이미 존재하는 두 리스트를 요소별로 합산하는 경우에는 map() + operator.add()가 효율적입니다. 자신의 코드 스타일과 데이터 규모에 맞는 방법을 선택해 활용해 보시기 바랍니다.