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

Python으로 정사각형 행렬의 주대각선 요소 제거하기

정사각형 행렬에서 주대각선(첫 번째 대각선)에 해당하는 요소들을 제거해야 할 때, 파이썬의 enumerate 함수와 리스트 컴프리헨션(list comprehension)을 활용하면 간결하게 해결할 수 있습니다.

예제 코드

아래는 실제 구현 예시입니다.

my_list = [[45, 67, 85, 42, 11], [78, 99, 10, 13, 0], [91, 23, 23, 64, 23], [91, 11, 22, 14, 35]]

print("The list is :")
print(my_list)

my_result = []

for index, element in enumerate(my_list):
   my_result.append([ele for index_1, ele in enumerate(element) if index_1 != index])

print("The resultant matrix is :")
print(my_result)

실행 결과

The list is :
[[45, 67, 85, 42, 11], [78, 99, 10, 13, 0], [91, 23, 23, 64, 23], [91, 11, 22, 14, 35]]
The resultant matrix is :
[[67, 85, 42, 11], [78, 10, 13, 0], [91, 23, 64, 23], [91, 11, 22, 35]]

동작 원리 설명

  • 먼저 리스트 안에 리스트가 중첩된 형태(2차원 리스트)로 행렬을 정의하고, 콘솔에 출력하여 확인합니다.
  • 결과를 저장할 빈 리스트를 하나 생성합니다.
  • enumerate 함수를 사용하여 원본 행렬을 순회하면서 각 행의 인덱스와 요소를 동시에 얻습니다.
  • 순회 과정 내부에서 리스트 컴프리헨션을 사용해 각 행의 요소들을 다시 한 번 열거합니다.
  • 이때 내부 요소의 인덱스(index_1)와 외부 행의 인덱스(index)가 서로 같은지 비교합니다. 두 값이 같다는 것은 해당 요소가 주대각선 위에 위치한다는 의미입니다.
  • 두 인덱스가 다른 경우에만 해당 요소를 결과 리스트에 추가함으로써, 자연스럽게 대각선 요소가 제외됩니다.
  • 최종적으로 처리된 행렬이 콘솔에 출력됩니다.

핵심 포인트

이 방법의 핵심은 행과 열의 인덱스가 일치하는 위치, 즉 [i][i] 형태의 요소만 걸러내는 것입니다. enumerate를 이중으로 활용하면 별도의 인덱스 변수를 관리하지 않고도 깔끔하게 조건 필터링을 수행할 수 있어, 코드의 가독성과 유지보수성이 높아집니다.