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

Python 리스트에서 고유한 값만 추출하는 3가지 방법

Python에서 리스트(list)는 대괄호 [] 안에 여러 항목을 담는 자료구조로, 서로 다른 데이터 타입의 요소를 함께 저장할 수 있으며 중복된 값도 포함할 수 있습니다. 이 글에서는 리스트에서 중복을 제거하고 고유한(unique) 값만 추출하는 다양한 방법을 소개합니다.

1. append()와 not in 조건 활용하기

가장 기본적인 방법은 빈 리스트를 하나 만든 뒤, 원본 리스트의 요소를 순회하면서 새 리스트에 아직 존재하지 않는 경우에만 추가하는 것입니다. for 반복문과 not in 조건을 함께 사용하여, 들어오는 요소가 새 리스트에 이미 있는지 검사한 후 없을 때만 append()로 추가합니다.

예제 코드

def catch_unique(list_in):
    # 빈 리스트 초기화
    unq_list = []

    # 요소 확인
    for x in list_in:
        # unq_list에 존재하는지 검사
        if x not in unq_list:
            unq_list.append(x)

    # 결과 출력
    for x in unq_list:
        print(x)

Alist = ['Mon', 'Tue', 'Mon', 'wed', 40, 40]
print("리스트의 고유한 값:")
catch_unique(Alist)

실행 결과

리스트의 고유한 값:
Mon
Tue
wed
40

이 방법은 요소의 원래 순서를 그대로 유지한다는 장점이 있습니다. 다만 리스트의 in 연산은 선형 탐색이므로, 데이터가 매우 클 경우 성능이 떨어질 수 있다는 점을 참고하세요.

2. set(집합) 자료형 활용하기

Python의 집합(set)은 정의상 중복 값을 허용하지 않습니다. 따라서 리스트를 집합으로 변환하면 중복이 자동으로 제거되고, 이를 다시 리스트로 변환하면 고유한 값만 담긴 리스트를 얻을 수 있습니다.

예제 코드

Alist = ['Mon', 'Tue', 'Mon', 'wed', 40, 40]
A_set = set(Alist)
New_List = list(A_set)
print("리스트의 고유한 값:")
print(New_List)

실행 결과

리스트의 고유한 값:
[40, 'Tue', 'wed', 'Mon']

집합은 순서가 없는 자료형이기 때문에, 변환 후에는 원래 리스트의 순서가 보장되지 않습니다. 순서가 중요하지 않고 간결한 코드를 원한다면 가장 효율적인 방법입니다.

3. numpy의 unique() 함수 활용하기

numpy 라이브러리의 unique() 함수는 리스트를 입력받아 고유한 요소들로 구성된 배열을 바로 반환해 주므로, 별도의 로직 작성 없이 한 줄로 처리할 수 있습니다.

예제 코드

import numpy as np

Alist = ['Mon', 'Tue', 'Mon', 'wed', 40, 40]
print("리스트의 고유한 값:")
print(np.unique(Alist))

실행 결과

리스트의 고유한 값:
['40' 'Mon' 'Tue' 'wed']

출력 결과를 보면 숫자 40이 문자열 '40'으로 변환된 것을 알 수 있습니다. numpy는 내부적으로 모든 요소를 동일한 타입으로 통일하기 때문인데, 혼합 타입 리스트를 다룰 때는 이 점에 유의해야 합니다.

마무리

세 가지 방법을 정리하면 다음과 같습니다.

  • append() + not in: 원래 순서 유지, 직관적이지만 대용량 데이터에서 느림
  • set(): 간결하고 빠르지만 순서가 사라짐
  • numpy.unique(): 수치 데이터 처리에 적합하며 정렬된 결과 반환, 단 타입 통일에 주의

데이터의 크기, 순서 보존 여부, 데이터 타입 등 상황에 맞는 방법을 선택하면 됩니다.