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

서로 다른 데이터 유형을 가진 행렬에서 고유한 행만 추출하는 Python 프로그램

행렬(리스트의 리스트) 안에서 모든 요소의 데이터 유형이 서로 겹치지 않는 행만 골라내야 하는 경우가 있습니다. 이럴 때는 행렬을 순회하면서 각 요소의 유형을 확인하고, set 자료형의 중복 제거 특성을 활용하면 간단하게 해결할 수 있습니다.

핵심 아이디어

한 행(부분 리스트) 안에 있는 요소들의 유형을 모두 모은 뒤 set으로 변환하면 중복된 유형이 사라집니다. 만약 원래 행의 길이와 고유한 유형의 개수가 같다면, 그 행의 모든 요소는 서로 다른 데이터 유형을 가진다는 의미입니다.

예제 코드

아래는 실제 동작을 보여주는 전체 코드입니다.

my_list = [[4, 2, 6], ["python", 2, {6: 2}], [3, 1, "fun"], [9, (4, 3)]]

print("The list is :")
print(my_list)
my_result = []
for sub in my_list:

   type_size = len(list(set([type(ele) for ele in sub])))

   if len(sub) == type_size:
      my_result.append(sub)

print("The resultant distinct data type rows are :")
print(my_result)

실행 결과

The list is :
[[4, 2, 6], ['python', 2, {6: 2}], [3, 1, 'fun'], [9, (4, 3)]]
The resultant distinct data type rows are :
[['python', 2, {6: 2}], [9, (4, 3)]]

코드 설명

  • 정수, 문자열, 딕셔너리, 튜플 등 다양한 데이터 유형이 섞여 있는 리스트를 정의하고 콘솔에 출력합니다.

  • 조건을 만족하는 행을 담아둘 빈 리스트 my_result를 준비합니다.

  • 원본 리스트를 순회하면서 각 행(부분 리스트)에 대해, 리스트 컴프리헨션으로 모든 요소의 type() 값을 수집합니다.

  • 수집된 유형 목록을 set으로 변환해 중복을 제거한 후, 다시 list로 변환하고 그 길이를 구합니다. 이 값이 곧 해당 행에 존재하는 고유한 데이터 유형의 개수입니다.

  • 행의 전체 길이와 고유 유형의 개수를 비교합니다.

  • 두 값이 일치하면 그 행의 모든 요소가 서로 다른 유형이라는 뜻이므로, 결과 리스트에 추가(append)합니다.

  • 반복이 끝나면 최종 결과를 콘솔에 출력합니다.

결과 분석

실행 결과를 보면 첫 번째 행 [4, 2, 6]은 세 요소가 모두 정수(int)라서 제외되었고, 세 번째 행 [3, 1, "fun"] 역시 정수가 두 개 있어 제외되었습니다. 반면 ['python', 2, {6: 2}]는 문자열·정수·딕셔너리, [9, (4, 3)]는 정수·튜플로 각각 유형이 모두 달라 최종 결과에 포함되었습니다.