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

Python으로 리스트의 인접한 요소 간 차이 계산하기

이 글에서는 주어진 리스트에서 인접한 요소들의 값을 서로 빼서 새로운 리스트를 만드는 방법을 알아봅니다. 이를 구현하는 방법은 여러 가지가 있으며, 대표적인 접근 방식들을 예제 코드와 함께 하나씩 살펴보겠습니다.

append와 range 활용하기

첫 번째 방법은 인덱스 위치를 이용해 인접한 요소들의 값을 서로 빼고, 그 결과를 새로운 리스트에 추가(append)하는 방식입니다. range() 함수와 len() 함수를 함께 사용하여 반복 횟수를 관리합니다.

예제

listA = [25, 97, 13, 62, 14, 102]

print("Given list:\n", listA)
list_with_diff = []
for n in range(1, len(listA)):
    list_with_diff.append(listA[n] - listA[n-1])
print("Difference between adjacent elements in the list: \n",
      list_with_diff)

실행 결과

Given list:
[25, 97, 13, 62, 14, 102]
Difference between adjacent elements in the list:
[72, -84, 49, -48, 88]

zip과 리스트 슬라이싱 활용하기

두 번째 방법은 zip() 함수와 리스트 슬라이싱을 조합하는 것입니다. 원본 리스트 전체와 두 번째 요소부터 시작하는 슬라이스된 리스트를 zip()으로 묶으면 인접한 요소 쌍을 손쉽게 얻을 수 있습니다. 이후 for 루프에서 각 쌍의 차이를 계산해 새로운 리스트에 추가합니다.

예제

listA = [25, 97, 13, 62, 14, 102]

print("Given list:\n", listA)
list_with_diff = []
for i, j in zip(listA[0::], listA[1::]):
    list_with_diff.append(j - i)
print("Difference between adjacent elements in the list: \n",
      list_with_diff)

실행 결과

Given list:
[25, 97, 13, 62, 14, 102]
Difference between adjacent elements in the list:
[72, -84, 49, -48, 88]

리스트 컴프리헨션으로 더 간결하게

위에서 살펴본 zip 방식은 리스트 컴프리헨션(list comprehension)을 사용하면 단 한 줄로 표현할 수 있어 코드가 훨씬 깔끔해집니다.

listA = [25, 97, 13, 62, 14, 102]

list_with_diff = [j - i for i, j in zip(listA, listA[1:])]
print(list_with_diff)  # [72, -84, 49, -48, 88]

추가 팁: NumPy의 diff 함수

NumPy를 사용할 수 있는 환경이라면 np.diff() 함수 하나만으로 인접 요소 간의 차이를 한 번에 계산할 수 있습니다. 대량의 숫자 데이터를 다룰 때는 성능 면에서도 유리합니다.

import numpy as np

listA = [25, 97, 13, 62, 14, 102]
diff = np.diff(listA)
print(diff)  # [ 72 -84  49 -48  88]

마무리

정리하면, 인접한 요소 간의 차이를 구하는 방법은 상황에 따라 선택하면 됩니다. 기본 문법 연습에는 range()append(), 가독성과 간결함이 중요하다면 zip()과 리스트 컴프리헨션, 수치 데이터 처리 성능이 중요하다면 NumPy의 diff()를 활용하는 것이 좋습니다.