리스트 안에서 서로 겹치는(circular) 연속 숫자들의 합을 구해야 할 때는 리스트 컴프리헨션, 슬라이싱, 연결 연산자(+), 그리고 zip() 함수를 조합하면 단 몇 줄의 코드로 간단하게 처리할 수 있습니다.
예제 코드
아래는 실제 동작 과정을 보여주는 예제입니다.
my_list = [41, 27, 53, 12, 29, 32, 16]
print("The list is :")
print(my_list)
my_result = [a + b for a, b in zip(my_list, my_list[1:] + [my_list[0]])]
print("The result is :")
print(my_result)출력 결과
The list is : [41, 27, 53, 12, 29, 32, 16] The result is : [68, 80, 65, 41, 61, 48, 57]
코드 설명
- 정수로 이루어진 리스트를 정의한 뒤 콘솔에 출력합니다.
my_list[1:]은 첫 번째 요소를 제외한 나머지 부분이며, 여기에[my_list[0]]을 '+' 연산자로 연결하면 첫 번째 요소가 맨 뒤로 이동한 순환(circular) 형태의 새로운 리스트가 만들어집니다.zip()함수는 원본 리스트와 이렇게 회전시킨 리스트를 요소별로 짝지어 주기 때문에, 인접한 두 요소의 쌍뿐 아니라 마지막 요소와 첫 번째 요소의 쌍까지 모두 생성됩니다.- 리스트 컴프리헨션이 각 쌍(a, b)을 순회하면서 a + b를 계산합니다.
- 계산 결과는 새로운 리스트로 변환되어 변수에 할당되고, 최종적으로 콘솔에 출력됩니다.
핵심 포인트
이 방식의 가장 큰 장점은 별도의 반복문이나 인덱스 계산 없이 한 줄의 표현식만으로 순환형 인접 합을 구할 수 있다는 점입니다. 만약 마지막 요소와 첫 번째 요소를 묶는 것이 필요 없다면, 회전 부분인 + [my_list[0]]을 제외하고 zip(my_list, my_list[1:]) 형태로 작성하면 됩니다.