이 글에서는 숫자로만 이루어진 리스트가 주어졌을 때, 인접한 두 요소의 차이를 계산하여 새로운 리스트를 만드는 방법을 알아봅니다. 예를 들어 [12, 14, 78, 24, 24]라는 리스트가 있다면, 연속된 요소들의 차이인 [2, 64, -54, 0]을 결과로 얻을 수 있습니다.
방법 1: 인덱스(Index) 활용하기
가장 기본적인 방법은 for 루프와 함께 요소의 인덱스를 사용하는 것입니다. 각 인덱스 위치에서 현재 요소와 다음 요소의 차이를 계산하여 리스트 컴프리헨션으로 결과를 만들 수 있습니다.
예제 코드
listA = [12,14,78,24,24]
# 주어진 리스트
print("Given list : \n",listA)
# 인덱스 위치 활용
res = [listA[i + 1] - listA[i] for i in range(len(listA) - 1)]
# 결과 출력
print ("List with successive difference in elements : \n" ,res)실행 결과
위 코드를 실행하면 아래와 같은 결과가 출력됩니다.
Given list : [12, 14, 78, 24, 24] List with successive difference in elements : [2, 64, -54, 0]
방법 2: 슬라이싱(Slicing) 활용하기
슬라이싱은 또 다른 유용한 기법입니다. 리스트에서 마지막 요소를 제외한 부분과 첫 번째 요소를 제외한 부분을 각각 슬라이싱한 뒤, zip 함수로 두 시퀀스를 묶어 각 쌍의 차이를 계산합니다.
예제 코드
listA = [12,14,78,24,24]
# 주어진 리스트
print("Given list : \n",listA)
# 리스트 슬라이싱 활용
res = [x - y for y, x in zip(listA[: -1], listA[1 :])]
# 결과 출력
print ("List with successive difference in elements : \n" ,res)실행 결과
위 코드를 실행하면 아래와 같은 결과가 출력됩니다.
Given list : [12, 14, 78, 24, 24] List with successive difference in elements : [2, 64, -54, 0]
방법 3: operator.sub 활용하기
operators 모듈의 sub 메서드를 map 함수와 함께 사용할 수도 있습니다. 이 방법 역시 슬라이싱으로 인접한 두 요소 쌍을 만든 후, map 함수가 각 쌍에 대해 뺄셈을 수행하도록 합니다.
예제 코드
import operator
listA = [12,14,78,24,24]
# 주어진 리스트
print("Given list : \n",listA)
# operator.sub 활용
res = list(map(operator.sub, listA[1:], listA[:-1]))
# 결과 출력
print ("List with successive difference in elements : \n" ,res)실행 결과
위 코드를 실행하면 아래와 같은 결과가 출력됩니다.
Given list : [12, 14, 78, 24, 24] List with successive difference in elements : [2, 64, -54, 0]
정리
세 가지 방법 모두 동일한 결과를 반환하지만 상황에 따라 장단점이 있습니다. 인덱스 방식은 직관적이고 이해하기 쉬우며, 슬라이싱과 zip을 조합한 방식은 파이썬다운 간결함이 돋보입니다. operator.sub와 map을 사용하는 방식은 대량의 데이터를 처리할 때 성능 면에서 유리할 수 있습니다. 코드의 가독성과 실행 환경을 고려해 적절한 방법을 선택하면 됩니다.