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

Python – 행렬의 각 열에 포함된 모든 요소가 고유한지 확인하는 방법

행렬의 각 열에 있는 모든 요소가 고유한지(중복이 없는지) 검사해야 하는 경우, 간단한 반복문과 리스트 컴프리헨션(list comprehension), 그리고 'set' 연산자를 활용하면 손쉽게 해결할 수 있습니다.

핵심 아이디어는 집합(set)은 중복을 허용하지 않는다는 특성을 이용하는 것입니다. 즉, 한 열을 집합으로 변환했을 때 길이가 줄어든다면 중복된 요소가 존재한다는 뜻입니다.

아래는 실제 동작 예시입니다.

예제 코드

my_list = [[11, 24, 84], [24, 55, 11], [7, 11, 9]]

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

my_result = True

for index in range(len(my_list[0])):

    column = [ele[index] for ele in my_list]

    if len(list(set(column))) != len(column):
        my_result = False
        break

if(my_result == True):
    print("All columns are unique")
else:
    print(("All columns are not unique"))

실행 결과

The list is :
[[11, 24, 84], [24, 55, 11], [7, 11, 9]]
All columns are unique

코드 설명

  • 정수로 구성된 리스트의 리스트(2차원 리스트)를 정의한 후, 콘솔에 출력하여 보여줍니다.

  • 결과를 저장할 변수를 선언하고 불리언 값 True로 초기화합니다.

  • 첫 번째 행의 길이만큼 반복하며, 리스트 컴프리헨션을 사용해 각 인덱스 위치의 요소들을 모아 해당 열(column)을 추출합니다.

  • 추출한 열을 set()으로 변환하여 고유한 요소만 남긴 뒤, 그 길이와 원래 열의 길이를 비교합니다. 두 길이가 다르다는 것은 중복된 요소가 있다는 의미이므로, 불리언 값을 False로 변경합니다.

  • 중복이 발견되는 즉시 break 문으로 반복문을 빠져나와 불필요한 연산을 줄입니다.

  • 마지막으로 최종 불리언 값에 따라 모든 열이 고유한지 여부에 대한 메시지를 콘솔에 출력합니다.

참고: 더 간결한 작성 방법

all() 함수와 제너레이터 표현식을 활용하면 위 코드를 다음과 같이 한 줄로 더 간결하게 표현할 수도 있습니다.

my_result = all(
    len(set(col)) == len(col)
    for col in zip(*my_list)
)

여기서 zip(*my_list)는 2차원 리스트의 행과 열을 뒤바꿔(transpose) 각 열을 튜플 형태로 순회할 수 있게 해주는 파이썬의 관용적인 기법입니다. 이 방법을 사용하면 인덱스 계산 없이도 동일한 결과를 얻을 수 있으며, 코드의 가독성도 크게 향상됩니다.