Python 알고리즘

Remove Duplicates from a Python List While Keeping Order

Use a set for fast "have I seen this?" checks and a list to keep the first-seen order.

  • 중급
  • 2분 분량
  • 실행 가능한 예제 1개
배울 내용
  • Membership tests with a set
  • Building the result list
  • Why set(values) alone loses the order
Input, then result
3
1
3
2
1
4
3
1
2
4
The highlighted repeats are skipped; order is kept.

Seen set plus ordered result

리스트를 집합으로 바꾸면 중복은 빨리 사라지지만, 집합은 원래 순서를 유지하지 않습니다. 순서가 중요하다면 값이 이미 나왔는지 빠르게 확인하는 집합과, 처음 나타난 순서를 유지하는 결과 리스트를 함께 쓰면 됩니다.

핵심 포인트

  1. Checking value in seen is O(1) with a set.
  2. Append only values that are new, then add them to seen.
  3. list(set(values)) removes duplicates but may change the order.

언제 사용하나요?

  • 논리적 사고력을 기르고 알고리즘이 동작하는 과정을 단계별로 이해합니다.
  • 데이터가 많거나 프로그램을 빠르게 만들어야 할 때 알맞은 방법을 고릅니다.
  • 시험, 과제, 코딩 면접을 준비합니다.

예제 코드

코드 실행 →
main.py
def unique_in_order(values):
    seen = set()
    result = []
    for value in values:
        if value not in seen:
            seen.add(value)
            result.append(value)
    return result

print(unique_in_order([3, 1, 3, 2, 1, 4]))
이 예제의 실행 버튼 만들기

실행 결과

[3, 1, 2, 4]

코드 설명

각 값은 한 번씩만 확인합니다. 아직 seen에 없는 값이면 집합 seen과 리스트 result 양쪽에 추가합니다. 그 뒤에 다시 나오는 값은 무시하므로 결과는 [3, 1, 2, 4]입니다. 집합에 값이 있는지 확인하는 것은 O(1)이므로 알고리즘 전체는 O(n)으로 실행됩니다.

값을 변경하고 Python 설치 없이 CodeUtility 온라인 Python 컴파일러에서 실행하세요.

연습 문제

아래 제안을 따라 코드를 바꿔 보세요. 코드를 직접 고치고 결과를 확인하면 읽기만 할 때보다 레슨을 훨씬 잘 이해할 수 있습니다.

  1. 빈 리스트, 요소가 하나인 리스트, 중복이 있는 리스트로 테스트해 보세요.
  2. 단계마다 상태를 출력해서 알고리즘이 동작하는 모습을 살펴보세요.
  3. 요소 100개, 1,000개, 10,000개로 실행 시간을 재고 다른 방법과 비교해 보세요.
Python 컴파일러에서 실행 →

챌린지로 연습하기

이 레슨에서 배운 내용으로 실제 문제를 풀어 보세요. 모든 챌린지는 브라우저에서 실행되며 즉시 테스트와 AI 리뷰를 받을 수 있습니다.

모든 챌린지