리스트에 중복된 원소를 없애는 방법이 있나요?
조회수 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 답변
-
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))
댓글 입력