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

파이썬(Python)으로 행렬에서 중복 요소가 있는 행 제거하기

행렬(2차원 리스트)에서 중복 요소가 포함된 행을 제거해야 할 때는 리스트 컴프리헨션(list comprehension)set() 연산자를 활용하면 매우 간단하게 해결할 수 있습니다.

핵심 아이디어는 다음과 같습니다. 어떤 행을 set()으로 변환했을 때 그 길이가 원래 행의 길이와 같다면, 해당 행에는 중복된 요소가 없다는 뜻입니다. 반대로 set() 변환 후 길이가 줄어들었다면 중복 요소가 존재하는 것이므로, 그 행은 결과에서 제외하면 됩니다.

예제 코드

아래는 행렬에서 중복 요소가 있는 행을 제거하는 전체 코드입니다.

my_list = [[34, 23, 34], [17, 46, 47], [22, 14, 22], [28, 91, 19]]

print("원본 리스트 :")
print(my_list)

my_result = [element for element in my_list if len(set(element)) == len(element)]

print("결과 리스트 :")
print(my_result)

실행 결과

원본 리스트 :
[[34, 23, 34], [17, 46, 47], [22, 14, 22], [28, 91, 19]]
결과 리스트 :
[[17, 46, 47], [28, 91, 19]]

코드 설명

  • 리스트 안에 리스트가 포함된 형태(2차원 리스트, 즉 행렬)를 정의한 뒤 콘솔에 출력합니다.
  • 리스트 컴프리헨션을 사용해 행렬의 각 행을 순회하면서, set(element)로 변환한 고유 요소의 개수와 원래 행의 길이를 비교합니다.
  • 예를 들어 [34, 23, 34]의 길이는 3이지만, set으로 변환하면 {34, 23}이 되어 길이가 2로 줄어듭니다. 따라서 이 행은 중복이 있다고 판단되어 제외됩니다.
  • 두 길이가 같은 행(중복이 없는 행)만 새로운 리스트에 저장되고, 그 결과가 my_result 변수에 할당됩니다.
  • 최종 결과 리스트가 콘솔에 출력됩니다.

set()이 중복 제거에 적합한 이유

파이썬의 set은 수학의 집합 개념을 구현한 자료형으로, 동일한 값을 하나만 저장합니다. 따라서 리스트를 set으로 변환하는 순간 중복 요소가 자동으로 사라지며, 이때 길이의 변화 여부만 확인하면 중복 존재 여부를 손쉽게 판별할 수 있습니다.

이 방식은 별도의 반복문이나 조건 분기를 여러 겹 작성할 필요 없이 한 줄의 리스트 컴프리헨션으로 처리할 수 있어 코드가 간결하고 가독성이 뛰어나다는 장점이 있습니다.