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


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

소스코드

def remove_duplicates():
    t = ['a', 'b', 'c', 'd']
    t2 = ['a', 'c', 'd']
    for t in t2:
        t.append(t.remove())
    return t
  • 2016년 01월 19일에 작성됨

조회수 1113


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))
  • 2016년 01월 19일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close