본문 바로가기
파이썬/파이썬 문법(기초)

리스트에서 중복을 제거하기.

by soypablo 2022. 8. 23.

리스트에서 어떤 중복된 값을 제거해야할 때, 주로 for문을 사용해 왔다.
그러나 코드가 길어지고 별도의 리스트를 생성해야 하는 단점이 있었다.
이번에 간결한 방법을 알게되어 소개한다.

# 기존 사용방법
mylist = ["a", "b", "a", "c", "c"]
new_list = []
for i in mylist:
    if i not in new_list:
        new_list.append(i)
mylist = new_list

print(mylist)

>>> ['a', 'b', 'c']

아래는 더 간결한 새로운 방법이다.

mylist = ["a", "b", "a", "c", "c"]
mylist = list(dict.fromkeys(mylist))
print(mylist)

>>>["a", "b", "c"]

dict.fromkeys를 통해 리스트에서 중복되는 요소를 제거 할 수 있다.

해설: dict.fromkeys(list) -> 리스트의 요소가 key값이 되고, None이 value값인 딕셔너리를 반환합니다.

mylist = ["a", "b", "a", "c", "c"]
print(dict.fromkeys(mylist))

>>> {'a': None, 'b': None, 'c': None}

즉 리스트를 딕셔너리로 전환하면서, 딕셔너리는 key값의 중복을 허용하지 않기 때문에,
중복된 요소를 하나만 남긴 딕셔너리가 생성된다.

이 딕셔너리를 list()함수에 넣게 되면, 다시 생성된 딕셔너리의 key값만 가지고 있는 리스트가 생성되는 원리이다.

mydict = {'a': None, 'b': None, 'c': None}
print(list(mydict))

>>> ["a", "b", "c"]