[python] List 중복 항목 제거









💡 팁 순서가 유지되는 방법과 그렇지 않은 방법이  있습니다.






1. list의 특성

  • 리스트를 정의할 땐 중괄호 []를 사용합니다.
  • a = [1, 2]
  • 순서화된 요소(인덱스 이용)이면나 요소간 중복이 가능합니다.
    b = [‘apple’, ‘banana’, ‘banana’]
  • 추가/변경/삭제 가능합니다.
    a = [1, 4, 3, 2]
    a.append(4)     # 리스트의 맨 뒤에 `4`를 추가
    print(a)
    #출력된 값  [1, 4, 3, 2, 4]
  • 리스트 안에 리스트를 다시 넣을 수도 있고, 다른 형식의 벡터를 넣을 수도 있습니다.
    e = [1, 2, (‘apple’, ‘banana’)] #리스트 안에 ()튜플이 있습니다.








2. 형변환을 통한 중복제거, Set

  • 집합 자료형은 크게 두가지 특징이 있습니다.
    • 중복을 허용하지 않는다.
    • 순서가 없다.
  • 중복을 허용하지 않는 특성을 이용해서 중복된 값이 있던 list를 set 형태로 바꾼 후, 다시 list 형태로 변환하면 중복을 제거할 수 있습니다.
  • set의 방식으로 중복을 제거할 경우, 순서가 뒤죽박죽 된다는 단점이 있다. 만약 순서를 지켜야 하는 경우, 반복문을 사용하세요
    names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
    unique_set = set(names)        #set으로 변환
    unique_list = list(unique_set) #list로 변환
    print(unique_list)
    출력된 값은 ['Stacy', 'Sarah', 'Jim', 'Bob']





3. numpy 모듈을 통한 중복제거, numpy.unique(sbj).tolist()

  • NumPy 패키지를 사용하는 경우, numpy.unique()함수를 사용할 수도 있습니다.
  • 이의 방법은 원래 요소 순서를 유지하지 않습니다.
    import numpy
    names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
    numpy.unique(names).tolist()
    출력된 값 ['Bob', 'Jim', 'Sarah', 'Stacy']





4. 반복문을 통한 순서유지 중복제거, for

  • my_list의 모든 요소를 순회하며 해당 요소가 new_list에 있는지 확인한 다음 해당 요소가 존재하지 않으면 new_list에 추가합니다.
    반복문과 조건문을 이용한 방법으로 순서가 유지됩니다.
    names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
    unique = []
    for name in names:         # 1st loop
        if name not in unique:   # 2nd loop
            unique.append(name)
    print(unique)
    출력된 값 ['Bob', 'Stacy', 'Sarah', 'Jim']







5. collections.OrderedDict 데이터구조를 통한 순서유지 중복제거

  • collections.OrderedDict 데이터 구조는 원래 순서를 유지하면서 목록을 중복 제거합니다.
    from collections import OrderedDict
    names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
    unique = list(OrderedDict.fromkeys(names))
    print(unique)
    출력된 값 ['Bob', 'Stacy', 'Sarah', 'Jim']






6. numpy 모듈과 index를 이용한 순서유지 중복제거

  • NumPy 의 순서를 유지하면서 목록을 중복 제거하려면 index를 부여하면 됩니다.
    import numpy
    names = ['Bob', 'Stacy', 'Sarah', 'Jim', 'Stacy', 'Jim']
    _, indexes = numpy.unique(names, return_index=True)
    unique = [names[i] for i in numpy.sort(indexes)]
    print(unique)
    출력된 값 ['Bob', 'Stacy', 'Sarah', 'Jim']









댓글 쓰기

0 댓글