Python 에서 리스트에 중복 항목이 있는지 확인하는 방법

PythonBeginner
지금 연습하기

소개

이 랩에서는 Python 에서 리스트에 중복된 항목이 있는지 확인하는 방법을 살펴봅니다. 중복 항목을 식별하는 방법을 이해하는 것은 데이터 정리, 분석 및 최적화에 매우 중요합니다.

두 가지 주요 방법을 다룰 것입니다: 원래 리스트의 길이와 해당 세트 표현의 길이를 비교하는 방법과 collections.Counter 객체를 활용하는 방법입니다. 이 랩은 중복 항목이 무엇인지, 그리고 이를 식별하는 것이 왜 중요한지 정의하는 것으로 시작하여, duplicates.py 파일을 생성하고 리스트 내에서 중복 항목을 찾는 함수를 구현하는 것을 포함하여 각 방법을 보여주는 실용적인 Python 코드 예제를 제공합니다.

중복 항목 정의

이 단계에서는 프로그래밍 맥락에서 중복 항목이 무엇인지, 그리고 Python 에서 이를 식별하는 방법을 살펴봅니다. 중복 항목을 이해하는 것은 데이터 정리, 분석 및 최적화에 매우 중요합니다.

중복 항목이란 무엇인가요?

중복 항목은 데이터 세트 또는 항목 모음 내에서 반복되는 값입니다. 예를 들어, 리스트 [1, 2, 2, 3, 4, 4, 4]에서 숫자 24는 두 번 이상 나타나므로 중복 항목입니다.

중복 항목을 식별하는 이유는 무엇인가요?

중복 항목을 식별하고 처리하는 것은 다음과 같은 여러 가지 이유로 중요합니다.

  • 데이터 정확성: 중복 항목은 분석 결과를 왜곡하고 잘못된 결론으로 이어질 수 있습니다.
  • 저장 효율성: 중복 항목을 저장하면 공간과 리소스가 낭비됩니다.
  • 성능: 중복 항목을 처리하면 알고리즘과 애플리케이션의 속도가 느려질 수 있습니다.

Python 에서 중복 항목 식별하기

리스트에서 중복 항목을 식별하는 Python 스크립트를 만들어 보겠습니다.

  1. VS Code 편집기를 엽니다.

  2. ~/project 디렉토리에 duplicates.py라는 새 파일을 만듭니다.

    ~/project/duplicates.py
  3. duplicates.py 파일에 다음 코드를 추가합니다.

    def find_duplicates(data):
        seen = set()
        duplicates = []
        for item in data:
            if item in seen:
                duplicates.append(item)
            else:
                seen.add(item)
        return duplicates
    
    numbers = [1, 2, 2, 3, 4, 4, 4, 5]
    duplicate_numbers = find_duplicates(numbers)
    print("Original list:", numbers)
    print("Duplicate numbers:", duplicate_numbers)

    설명:

    • find_duplicates 함수는 리스트 data를 입력으로 받습니다.
    • 이 함수는 지금까지 발견한 항목을 추적하기 위해 seen이라는 set을 사용합니다. 세트는 고유한 값만 저장하므로 유용합니다.
    • data 리스트를 반복합니다. 항목이 이미 seen 세트에 있으면 중복 항목임을 의미하므로 duplicates 리스트에 추가됩니다. 그렇지 않으면 항목이 seen 세트에 추가됩니다.
    • 마지막으로, 함수는 duplicates 리스트를 반환합니다.
  4. 터미널에서 다음 명령을 사용하여 스크립트를 실행합니다.

    python duplicates.py

    다음 출력을 볼 수 있습니다.

    Original list: [1, 2, 2, 3, 4, 4, 4, 5]
    Duplicate numbers: [2, 4, 4]

    이 출력은 원래 리스트와 리스트에서 발견된 중복 숫자를 보여줍니다.

len() 과 len(set()) 비교

이 단계에서는 len() 함수와 set() 데이터 구조를 사용하여 리스트에서 중복 항목을 감지하는 보다 효율적인 방법을 살펴봅니다. 이 방법은 세트가 고유한 요소만 저장한다는 사실을 활용합니다.

len()set() 이해

  • len(): 이 함수는 리스트 또는 다른 모든 반복 가능한 객체에 있는 항목의 수를 반환합니다.
  • set(): 이 함수는 리스트 (또는 모든 반복 가능한 객체) 를 세트로 변환합니다. 세트는 고유한 요소의 모음으로, 중복 항목을 자동으로 제거합니다.

작동 방식

핵심 아이디어는 원래 리스트의 길이와 해당 리스트에서 생성된 세트의 길이를 비교하는 것입니다. 길이가 다르면 원래 리스트에 중복 항목이 있었다는 의미입니다.

예시

이전 단계에서 생성한 duplicates.py 파일을 수정하여 이 방식을 사용해 보겠습니다.

  1. VS Code 를 사용하여 ~/project 디렉토리에서 duplicates.py 파일을 엽니다.

  2. 코드를 다음과 같이 수정합니다.

    def has_duplicates(data):
        return len(data) != len(set(data))
    
    numbers = [1, 2, 2, 3, 4, 4, 4, 5]
    if has_duplicates(numbers):
        print("The list contains duplicates.")
    else:
        print("The list does not contain duplicates.")

    설명:

    • has_duplicates 함수는 이제 원래 리스트 data의 길이와 data에서 생성된 세트의 길이를 비교합니다.
    • 길이가 다르면 함수는 True(중복 항목이 있음을 의미) 를 반환하고, 그렇지 않으면 False를 반환합니다.
  3. 터미널에서 다음 명령을 사용하여 스크립트를 실행합니다.

    python duplicates.py

    다음 출력을 볼 수 있습니다.

    The list contains duplicates.

    numbers 리스트를 [1, 2, 3, 4, 5]로 변경하면 출력은 다음과 같습니다.

    The list does not contain duplicates.

이 방법은 이전 방법보다 더 간결하며, 특히 큰 리스트의 경우 더 효율적인 경우가 많습니다.

collections.Counter 사용

이 단계에서는 collections.Counter 클래스를 사용하여 중복 항목을 계산하는 훨씬 더 강력하고 Pythonic 한 방법을 살펴봅니다. 이 클래스는 리스트 또는 기타 반복 가능한 객체에서 항목의 빈도를 계산하도록 특별히 설계되었습니다.

collections.Counter 이해

collections.Counter 클래스는 해시 가능한 객체를 계산하도록 특별히 설계된 dict의 서브클래스입니다. 요소는 딕셔너리 키로, 해당 개수는 딕셔너리 값으로 저장합니다.

작동 방식

collections.Counter는 리스트에서 각 항목의 발생 횟수를 자동으로 계산합니다. 그런 다음 개수에 쉽게 액세스하여 중복 항목을 식별할 수 있습니다.

예시

collections.Counter를 사용하도록 ~/project 디렉토리의 duplicates.py 파일을 수정해 보겠습니다.

  1. VS Code 를 사용하여 ~/project 디렉토리에서 duplicates.py 파일을 엽니다.

  2. 코드를 다음과 같이 수정합니다.

    from collections import Counter
    
    def find_duplicates_counter(data):
        counts = Counter(data)
        duplicates = [item for item, count in counts.items() if count > 1]
        return duplicates
    
    numbers = [1, 2, 2, 3, 4, 4, 4, 5]
    duplicate_numbers = find_duplicates_counter(numbers)
    print("Original list:", numbers)
    print("Duplicate numbers:", duplicate_numbers)

    설명:

    • collections 모듈에서 Counter 클래스를 가져옵니다.
    • find_duplicates_counter 함수는 입력 리스트 data에서 Counter 객체를 생성합니다. 이렇게 하면 각 항목의 발생 횟수가 자동으로 계산됩니다.
    • 그런 다음 리스트 컴프리헨션을 사용하여 개수가 1 보다 큰 항목 (즉, 중복 항목) 의 리스트를 만듭니다.
  3. 터미널에서 다음 명령을 사용하여 스크립트를 실행합니다.

    python duplicates.py

    다음 출력을 볼 수 있습니다.

    Original list: [1, 2, 2, 3, 4, 4, 4, 5]
    Duplicate numbers: [2, 4]

    이 출력은 원래 리스트와 리스트에서 발견된 중복 숫자를 보여줍니다. Counter 접근 방식은 중복 항목의 모든 발생 횟수가 아닌 고유한 중복 값만 반환한다는 점에 유의하세요.

요약

이 Lab 에서는 데이터 세트 내에서 반복되는 값으로 중복 항목을 정의하고 데이터 정확성, 저장 효율성 및 성능에 미치는 영향을 강조하는 것으로 시작했습니다. 그런 다음 find_duplicates 함수를 사용하여 리스트에서 중복 항목을 식별하는 Python 스크립트를 만들었습니다.

이 함수는 입력 리스트를 반복하며, seen이라는 set을 사용하여 발견된 항목을 추적합니다. 항목이 이미 seen에 있으면 중복 항목으로 식별되어 duplicates 리스트에 추가됩니다. 이 접근 방식은 세트의 고유 값 속성을 활용하여 중복 항목을 효율적으로 감지합니다.