목록에서 중복 항목을 제거하는 방법 Python

⚡ 스마트 요약

중복 항목 제거 Python 리스트를 생성하는 데에는 set(), dict.fromkeys(), 반복문, 리스트 컴프리헨션, NumPy 및 Pandas 라이브러리 메서드 등 여러 가지 내장 방식이 있으며, 각 방식은 순서 유지와 속도 사이의 균형을 맞춥니다.

  • 🔘 설정 방법: set() 함수는 즉시 서로 다른 요소들을 반환하지만, 원래 리스트의 순서를 유지하지는 않습니다.
  • ☑️ 순서가 유지되었습니다: dict.fromkeys()와 OrderedDict는 중복을 제거하는 동안 유지됩니다.ping 최초로 확인된 삽입 순서.
  • 수동 제어: 멤버십 검사를 사용하는 for 루프 또는 리스트 컴프리젠테이션은 순서를 유지하고 가독성을 높입니다.
  • 🧪 라이브러리 메서드: NumPy의 unique() 및 Pandas의 unique() 함수는 데이터 중복을 제거하고 tolist() 메서드를 통해 리스트 형태로 결과를 반환합니다.
  • 🛠️ 해시 가능성 제한: 세트 및 딕셔너리 키에는 해시 가능한 항목이 필요하므로 리스트 또는 딕셔너리를 사용하려면 루프 기반 접근 방식이 필요합니다.
  • 🤖 AI 워크플로우: 머신러닝 파이프라인은 편향과 데이터 유출을 방지하기 위해 Pandas의 drop_duplicates() 함수를 사용하여 훈련 데이터의 중복을 제거합니다.

목록에서 중복 항목 제거하기 Python

Python 목록에서 중복 항목 제거

목록은 다양한 내용을 포함하는 컨테이너입니다. Python 정수, 단어, 값 등이 될 수 있는 객체입니다. 이는 다른 프로그래밍 언어의 배열과 동일합니다.

여기서는 주어진 목록에서 중복을 제거하는 다양한 방법을 살펴보겠습니다. Python.

방법 1) Set을 사용하여 목록에서 중복 항목을 제거합니다.

리스트에서 중복을 제거하려면 내장 함수인 `set()`을 사용할 수 있습니다. `set()` 메서드의 특징은 서로 다른 요소만 반환한다는 점입니다.

[1,1,2,3,2,2,4,5,6,2,1]이라는 리스트가 있습니다. 이 리스트에는 중복된 요소가 많으므로 이를 제거하고 서로 다른 요소만 남겨야 합니다. 이 리스트는 `set()` 내장 함수에 전달됩니다. Later 최종 목록은 내장 함수인 list()를 사용하여 표시됩니다.

우리가 얻는 출력은 중복 요소가 모두 제거된 고유한 요소들입니다.

예시

my_list = [1,1,2,3,2,2,4,5,6,2,1]
my_final_list = set(my_list)
print(list(my_final_list))

출력:

[1, 2, 3, 4, 5, 6]

방법 2) 임시 목록 사용

주어진 목록에서 중복 항목을 제거하려면 빈 임시 목록을 활용할 수 있습니다. 이를 위해서는 먼저 중복 항목이 있는 목록을 순회하면서 고유한 항목만 임시 목록에 추가해야 합니다. Later 임시 목록은 기본 목록에 할당됩니다.

예시

다음은 임시 목록을 사용한 작동 예시입니다.

my_list = [1, 2, 3, 1, 2, 4, 5, 4 ,6, 2]
print("List Before ", my_list)
temp_list = []

for i in my_list:
    if i not in temp_list:
        temp_list.append(i)

my_list = temp_list

print("List After removing duplicates ", my_list)

출력:

List Before  [1, 2, 3, 1, 2, 4, 5, 4, 6, 2]
List After removing duplicates  [1, 2, 3, 4, 5, 6]

방법 3) Dict 사용

`collections` 패키지에서 `OrderedDict`를 임포트하면 주어진 리스트에서 중복을 제거할 수 있습니다. `OrderedDict`는 파이썬 2.7 이상에서 사용할 수 있습니다. `OrderedDict`는 키가 존재하는 순서대로 고유한 요소들을 반환합니다.

리스트를 사용하고 OrderedDict에서 제공하는 fromkeys() 메서드를 이용하여 리스트에서 고유한 요소를 가져오도록 하겠습니다.

OrderedDict.fromkeys() 메서드를 사용하려면 아래와 같이 collections에서 OrderedDict를 가져와야 합니다.

from collections import OrderedDict

다음은 OrderedDict.fromkeys() 메서드를 사용하여 중복을 제거하는 예입니다.

예시

from collections import OrderedDict

my_list = ['a','x','a','y','a','b','b','c']

my_final_list = OrderedDict.fromkeys(my_list)

print(list(my_final_list))

출력:

['a', 'x', 'y', 'b', 'c']

이와 같은 서비스: Python 버전 3.5 이상에서는 일반적인 `dict.fromkeys()` 메서드를 사용하여 리스트에서 고유한 요소를 가져올 수 있습니다. `dict.fromkeys()` 메서드는 고유한 키를 반환하므로 중복 값을 제거하는 데 도움이 됩니다.

리스트에서 고유한 항목을 얻기 위해 dict.fromkeys()를 사용하는 방법을 보여주는 예는 다음과 같습니다.

예시

my_list = ['a','x','a','y','a','b','b','c']
my_final_list = dict.fromkeys(my_list)
print(list(my_final_list))

출력:

['a', 'x', 'y', 'b', 'c']

방법 4) for 루프 사용

사용 for 루프, 중복 항목을 제거하기 위해 항목 목록을 순회합니다.

먼저 배열을 빈 문자열([])로 초기화합니다. for 루프 안에서 리스트의 항목들이 myFinallist 배열에 이미 존재하는지 확인합니다. 만약 항목이 존재하지 않으면 append() 메서드를 사용하여 해당 항목을 myFinallist 배열에 추가합니다.

따라서 중복 항목이 발견되면 해당 항목은 이미 myFinallist 배열에 존재하므로 삽입되지 않습니다. 아래 예시를 통해 이를 확인해 보겠습니다.

예시

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinallist = []
for i in my_list:
    if i not in myFinallist:
myFinallist.append(i)
print(list(myFinallist))

출력:

[1, 2, 3, 4, 5, 6]

방법 5) 목록 이해 사용

목록 이해는 다음과 같습니다. Python 이미 생성된 시퀀스를 사용하여 새 시퀀스(예: 목록, 사전 등)를 생성하는 데 사용되는 함수입니다. 이렇게 하면 긴 루프를 줄이고 코드를 더 쉽게 읽고 유지 관리할 수 있습니다.

주어진 목록에서 중복된 항목을 제거하기 위해 목록 이해를 활용해 보겠습니다.

예시

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = []
[my_finallist.append(n) for n in my_list if n not in my_finallist]
print(my_finallist)

출력:

[1, 2, 3, 4, 5, 6]

방법 6) NumPy의 unique() 메서드 사용

NumPy 모듈의 unique() 메서드를 사용하면 주어진 목록에서 중복을 제거할 수 있습니다.

NumPy를 사용하려면 먼저 numpy 모듈을 가져와야 합니다.

단계 1) NumPy 모듈을 가져옵니다.

import numpy as np

단계 2) 중복된 요소가 포함된 리스트를 unique() 메서드 안에 사용하세요. 출력 결과는 tolist() 메서드를 사용하여 다시 리스트 형태로 변환됩니다.

myFinalList = np.unique(my_list).tolist()

단계 3) 마지막으로 목록을 출력합니다.

print(myFinalList)

출력이 포함된 최종 코드는 다음과 같습니다.

import numpy as np
my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = np.unique(my_list).tolist()
print(myFinalList)

출력:

[1, 2, 3, 4, 5, 6]

방법 7) Pandas 메서드 사용

Pandas 모듈에는 주어진 목록에서 고유한 요소를 제공하는 Unique() 메서드가 있습니다.

Pandas 모듈을 사용하려면 다음 단계를 따르세요.

단계 1) Pandas 모듈 가져오기

import pandas as pd

단계 2) 중복된 항목이 포함된 리스트를 unique() 메서드 안에 사용하세요.

myFinalList = pd.unique(my_list).tolist()

단계 3) 목록을 출력하세요:

print(myFinalList)

출력이 포함된 최종 코드는 다음과 같습니다.

import pandas as pd

my_list = [1,2,2,3,1,4,5,1,2,6]
myFinalList = pd.unique(my_list).tolist()
print(myFinalList)

출력:

[1, 2, 3, 4, 5, 6]

방법 8) enumerate() 및 목록 이해 사용

여기서는 리스트 컴프리헨션과 enumerate() 함수를 조합하여 중복 요소를 제거합니다. enumerate() 함수는 리스트의 각 요소에 대한 카운터를 포함하는 객체를 반환합니다. 예를 들어 (0,1), (1,2) 등입니다. 여기서 첫 번째 값은 인덱스이고 두 번째 값은 리스트 항목입니다.

각 요소가 목록에 있는지 확인하고, 있으면 목록에서 제거합니다.

예시

my_list = [1,2,2,3,1,4,5,1,2,6]
my_finallist = [i for j, i in enumerate(my_list) if i not in my_list[:j]]
print(list(my_finallist))

출력:

[1, 2, 3, 4, 5, 6]

자주 묻는 질문

아니요. 세트는 순서가 없는 컬렉션이므로 set() 메서드는 요소를 다른 순서로 반환할 수 있습니다. 순서를 유지하면서 중복을 제거하려면 dict.fromkeys()를 사용하거나 이미 추가된 항목이 아닌 다른 항목만 추가하는 반복문을 사용하세요.

큰 리스트의 경우 순서가 중요하지 않을 때는 멤버십 검사가 O(1)이므로 set()이 가장 빠릅니다. 순서가 중요한 경우에는 list(dict.fromkeys(my_list))가 거의 같은 속도로 작동하며 처음 본 순서를 한 줄로 유지합니다.

`set()`과 `dict.fromkeys()`는 해시 가능한 요소를 필요로 하므로 리스트나 딕셔너리에서는 작동하지 않습니다. 리스트를 순회하면서 아직 보지 못한 항목을 추가하거나, 각 항목을 튜플 또는 JSON 문자열로 변환하여 임시 키로 사용하세요.

list(dict.fromkeys(my_list))를 사용하세요. Python 3.7 버전의 딕셔너리는 삽입 순서를 유지하므로 키는 처음 나타난 순서대로 유지됩니다. 이전 버전에서는 동일한 결과를 얻으려면 collections.OrderedDict.fromkeys()를 사용하십시오.

아니요. set(), dict.fromkeys(), 리스트 컴프리헨션, NumPy 또는 Pandas의 unique()와 같은 메서드는 원본 리스트를 변경하지 않고 새로운 리스트를 생성합니다. 원본을 덮어쓰려면 결과를 동일한 변수에 다시 할당해야 합니다.

데이터가 이미 배열이나 시리즈에 저장되어 있거나 데이터 분석 중에 numpy.unique() 또는 pandas.unique()를 사용하세요. numpy.unique()는 값을 정렬하는 반면, pandas.unique()는 처음 나타난 순서를 유지한다는 점에 유의하세요. 일반 리스트를 얻으려면 tolist()를 호출하세요.

머신러닝 파이프라인은 학습 전에 중복 행을 제거하여 반복되는 샘플이 모델에 편향을 일으키거나 학습 세트와 테스트 세트 간에 데이터가 유출되는 것을 방지합니다. Pandas의 drop_duplicates() 함수는 테이블 형식 데이터셋을 정리하는 데 일반적으로 사용됩니다.

네. GitHub Copilot과 같은 AI 에이전트는 주석에서 set(), dict.fromkeys() 또는 Pandas 중복 제거 코드를 생성하고, 순서 유지 옵션을 제안하며, 반복문을 리팩토링합니다. 하지만 해시할 수 없는 항목과 같은 예외적인 경우는 여전히 확인해야 합니다.

이 게시물을 요약하면 다음과 같습니다.