행렬(Matrix)에서 특정 위치 이후에 나타나는 다음 요소를 찾아야 하는 경우가 종종 있습니다. 예를 들어, 주어진 좌표 (x, y) 이후에서 특정 키 값이 처음 등장하는 인덱스를 구하는 작업입니다. 이를 해결하기 위해 리스트를 순회하며 조건을 검사하는 함수를 정의하고, 해당 함수를 호출하여 결과를 확인할 수 있습니다.
구현 예제
다음은 행렬에서 다음으로 가까운 요소를 찾는 파이썬 프로그램의 전체 코드입니다.
def get_nearest_elem(my_list, x, y, my_key):
for index, row in enumerate(my_list[x:]):
for j, elem in enumerate(row):
if elem == my_key and j > y:
return index + x, j
return -1, -1
my_list = [[21, 32, 11, 22, 13], [91, 52, 31, 26, 33], [81, 52, 3, 22, 3], [11, 92, 83, 4, 9]]
print("The list is :")
print(my_list)
i, j = 1, 3
my_key = 3
my_res_abs, my_res_ord = get_nearest_elem(my_list, i, j, my_key)
print("The found K index is :")
print(my_res_abs, my_res_ord)
실행 결과
The list is : [[21, 32, 11, 22, 13], [91, 52, 31, 26, 33], [81, 52, 3, 22, 3], [11, 92, 83, 4, 9]] The found K index is : 2, 4
코드 설명
함수 정의: 'get_nearest_elem'이라는 이름의 함수가 정의되며, 이 함수는 리스트(행렬), 키 값, 그리고 두 개의 정수(시작 좌표 x, y)를 매개변수로 받습니다.
요소 탐색:
enumerate를 사용해 행렬의 각 행과 요소를 순회하며, 현재 요소가 키 값과 일치하고 열 인덱스(j)가 시작 좌표보다 큰 경우 해당 위치를 반환합니다. 슬라이싱my_list[x:]를 통해 x번째 행부터 검색을 시작합니다.검색 실패 처리: 조건에 맞는 요소를 찾지 못하면 (-1, -1)을 반환하여 결과가 없음을 알립니다.
데이터 초기화: 함수 외부에서 리스트의 리스트(2차원 배열) 형태의 행렬이 정의되고 콘솔에 출력됩니다.
좌표 및 키 설정: 검색을 시작할 좌표 (i, j)와 찾고자 하는 키 값 my_key가 정의됩니다. 여기서는 (1, 3) 위치 이후의 값 3을 찾습니다.
함수 호출 및 출력: 필요한 매개변수를 전달하여 함수를 호출한 뒤, 반환된 인덱스 값을 콘솔에 출력합니다.
위 실행 결과를 보면, 시작 좌표가 (1, 3)이므로 1번째 행의 3번째 열 이후부터 값 3을 검색합니다. 2번째 행([81, 52, 3, 22, 3])에서 인덱스 4에 위치한 값 3이 조건에 부합하므로 최종적으로 (2, 4)가 반환됩니다.