리스트에 중복된 원소를 없애는 방법이 있나요?

조회수 17641회

리스트에 중복된 원소를 제거한 새 리스트를 return 해주는 함수를 짜고 있습니다. 제가 짠 코드는 제대로 실행이 안되고 사실 어떻게 시작해야 될지 잘 모르겠습니다.

소스코드

def remove_duplicates():
    t = ['a', 'b', 'c', 'd']
    t2 = ['a', 'c', 'd']
    for t in t2:
        t.append(t.remove())
    return t

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    set() - 순서가 중요하지 않은 경우

    결론부터 말하면, 리스트의 순서를 유지하지 않아도 된다는 가정 하에 다음과 같이 쓰면 됩니다

    def removeDup(origin):
        return list(set(origin))
    

    코드에 대해 설명하면, 중복되는 원소가 하나도 없는(보통 "유니크" 하다고 표현) 데이터 구조를 만들 땐 set을 주로 씁니다. 집합의 정의처럼, set은 "유니크"한 객체를 무 순서적으로 저장합니다.

    iterable(list, tuple 등)을 set으로 만들어 중복을 제거 한 후 다시 set에서 list로 형 변환을 해 중복을 제거한 리스트를 생성합니다

    예제 :

    originalList = [1, 2, 3, 1, 2, 5, 6, 7, 8]
    mySet = set(originalList)
    changedList = list(mySet)
    noOrder = list(set(originalList)-set([1,2,3]))
    
    print "originalList:", originalList
    print "mySet:", mySet
    print "changedList:", changedList
    print "noOrder:", noOrder
    

    결과 :

    originalList: [1, 2, 3, 1, 2, 5, 6, 7, 8]
    mySet: set([1, 2, 3, 5, 6, 7, 8])
    changedList: [1, 2, 3, 5, 6, 7, 8]
    noOrder: [8, 5, 6, 7]
    

    다만, noOrder에서 보이는 것처럼 set은 원본 리스트의 순서를 보장하지 않으니 원본 순서를 유지하고 싶을 때는 다른 방법을 써야 합니다.

    dict.fromkeys() - 순서가 중요한 경우

    *파이썬 2.7이상에서만 쓸 수 있는 방법입니다.

    from collections import OrderedDict
    
    originalList = [1, 2, 3, 1, 2, 5, 6, 7, 8]
    list(OrderedDict.fromkeys(originalList))
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)