HOWTO · Python
Python의 목록에서 고유 한 값을 얻는 방법
이 기사에서는 Python의 목록에서 고유 한 값을 가져 오는 방법을 소개합니다.
이 페이지의 내용
Python 3.7 이상에서 Python 목록의 고유한 값을 얻으려면, 요소가 해시 가능하고 처음 나온 순서를 유지하려는 경우 list(dict.fromkeys(values))를 사용하세요. 요소가 해시 불가능하면 결과 목록을 만드는 반복문을 사용하세요. 순서가 중요하지 않을 때만 set(values)로 변환하세요.
dict.fromkeys()로 처음 나온 순서대로 고유한 값 얻기
dict.fromkeys()는 입력 가능한 반복 객체의 값을 키로 하는 딕셔너리를 만듭니다. 딕셔너리의 키는 고유하며, Python 3.7 이상에서는 딕셔너리가 삽입 순서를 보존하므로 키를 다시 목록으로 변환하면 각 값의 첫 등장 위치를 유지하면서 중복을 제거할 수 있습니다. 딕셔너리 키가 일반적으로 그렇듯, 이 방법을 사용하려면 모든 요소가 해시 가능해야 합니다.
다음 예제를 실행해 보세요:
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
values = ["pear", "apple", "pear", "plum", "apple"]
unique_values = list(dict.fromkeys(values))
print(unique_values)
출력:
['pear', 'apple', 'plum']
반복문으로 처음 나온 순서대로 고유한 값 얻기
중첩 목록처럼 해시 불가능한 값은 딕셔너리의 키나 집합의 원소로 사용할 수 없습니다. 대신 명시적인 반복문으로 각 값을 지금까지 모은 값과 비교할 수 있습니다. 이 방법은 첫 등장 값을 유지하며, 값 사이의 동등성 비교가 의미 있는 목록에서 작동합니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
values = [[1, 2], [3, 4], [1, 2]]
unique_values = []
for value in values:
if value not in unique_values:
unique_values.append(value)
print(unique_values)
각 value not in unique_values 검사는 결과 목록을 훑습니다. 고유한 항목이 늘어날수록 비교를 반복하는 방식은 해시 기반 방법보다 느려질 수 있습니다. 따라서 속도보다 해시 불가능한 요소를 지원하는 것이 더 중요할 때 이 방법을 사용하세요.
순서가 중요하지 않을 때 set()로 고유한 값 얻기
요소가 해시 가능하다면 set(values)로 간단히 중복을 제거할 수 있습니다. 집합은 입력 목록의 순서를 보존하지 않으므로, 집합을 다시 목록으로 변환했을 때 특정 순서가 나온다고 기대하지 마세요. 집합의 요소도 해시 가능해야 합니다. 순서가 중요하지 않은 경우, 예를 들어 포함 여부를 확인하거나 어떤 값들이 있는지 비교할 때 이 방법을 사용하세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
values = ["pear", "apple", "pear", "plum", "apple"]
unique_values = set(values)
print(unique_values)
표시되는 집합의 순서는 달라질 수 있습니다. 결과에는 고유한 값이 들어 있지만, 출력 순서는 보장되지 않습니다.
목록에 맞는 방법 선택하기
해시 가능한 값에서 각 값의 첫 등장 순서를 유지하는 간결한 결과 목록이 필요하다면 dict.fromkeys()를 선택하세요. 목록처럼 해시 불가능한 값이 있을 수 있고 첫 등장 순서도 중요하다면 명시적인 반복문을 사용하세요. 값은 해시 가능하지만 순서가 중요하지 않다면 set()를 선택하세요.
해시 가능한 입력에서는 딕셔너리와 집합의 포함 여부 확인이 평균적으로 효율적입니다. 반면 반복문은 점점 커지는 결과 목록을 계속 검색합니다. 이 방법들은 Python의 동등성 및 해싱 동작을 기준으로 중복을 판단합니다. 1과 True처럼 서로 같은 값으로 비교되는 값은 하나의 항목으로 합쳐집니다. 애플리케이션에서 다른 기준으로 고유성을 판단해야 한다면, 먼저 각 항목을 정규화하거나 항목별 키를 만든 다음 그 키를 기준으로 중복을 제거하세요.