본문 바로가기
메모/코딩

[파이썬] 모듈로 연산자(%) 활용 - 배열의 인덱스 범위 유지

by 붕붕=33 2022. 6. 25.

1차원 혹은 다차원 배열 값에 접근할 때

양 끝이 이어진 경우를 다뤄야할 때가 있다.

 

양 끝이 이어진 1차원 배열 예시

 

 

위 그림의 배열에서 특정 인덱스의 양 옆 이웃(neighborhood, size of 2)에 접근하는 경우

1번의  왼쪽 이웃은 5번, 오른쪽 이웃은 2번이다.

 

1번 인덱스의 양 옆 이웃은 5번(왼)과 2번(오)

 

 

파이썬 코드 작성 시 주의할 점은

왼쪽 이웃의 경우 현재 인덱스에서 1만큼 값을 빼주고 오른쪽은 1만큼 더해줄 때

가장 첫번째 셀의 왼쪽 이웃은 인덱스 -1을 갖고,

가장 마지막 셀의 오른쪽 이웃은 범위를 벗어나는 값인 배열 길이만큼의 인덱스를 갖는다는 것이다.

(파이썬은 인덱스 0부터 시작)

 

 

이렇게 인덱스가 순환하는 배열을 인덱스 범위 내에서 접근하도록 할 때

모듈로 연산자 (modulo operator, %)를 이용할 수 있다.

 

예시로, 길이 5인 1차원 배열(리스트)의 이웃에 접근하는 경우는 다음과 같이 구현할 수 있다.

 

def get_neighbors_aside(arr, idx):
    neighbor_left = arr[(idx - 1) % len(arr)]
    neighbor_right = arr[(idx + 1) % len(arr)]
    
    return neighbor_left, neighbor_right
    

if __name__ == "__main__":
    fruits = ['apple', 'peach', 'melon', 'mango', 'grape']
    i = 0		    # the first one
    j = len(fruits) - 1	    # the last one
    
    L, R = get_neighbors_aside(fruits, i)
    print(L, R)
    L, R = get_neighbors_aside(fruits, j)
    print(L, R)

댓글