<개인공부>/[Python]

[python] 파이썬 리스트 중복 제거 방법 3가지

사용자 BlockDMask 2021. 6. 11. 00:30
반응형

안녕하세요. BlockDMask입니다.
오늘은 파이썬 리스트에서 중복된 값을 삭제할 수 있는 방법 3가지에 대해서 알아보겠습니다.

<목차>
1. set 이용한 리스트 중복 제거
2. for 반복문을 이용한 리스트 중복 제거
3. dictionary를 이용한 리스트 중복 제거

 

 

1. 파이썬 리스트 중복제거 set을 이용한 방법


set 자료구조의 특징은 중복이 없다는 것입니다.
"중복이 불가능하다"라는 성질을 이용해서 리스트에서 중복을 제거할 수 있습니다.

리스트 자료형을 set(리스트)를 통해서 set 타입으로 변경하면서 중복을 제거합니다.
그 후에 list(set(리스트)) 다시 리스트로 감싸주어서 리스트 타입으로 데이터를 변경합니다.

예제를 바로 보겠습니다. arr이라는 중복이 있고, 순서가 막무가내인 리스트가 존재한다고 하겠습니다.

arr = [6, 5, 6, 4, 4, 1, 1, 2, 3, 9, 8, 7, 9, 8, 7]

result1 = set(arr)
print(f"set(arr)      : {result1}")

result2 = list(result1)  # list(set(arr))
print(f"list(set(arr) : {result2}")

 

첫 번째 결과를 보면 리스트를 set(arr) 하게 되어 리스트가 set 타입이 되어서 {} 괄호로 묶여있는 것을 볼 수 있습니다.
여기서 주의 깊게 보아야 할 것은 중복이 제거되었다는 점과 자동으로 순서가 변경되었다는 점입니다.
파이썬이 업데이트되면서 set에서 자동으로 순서가 생긴 것으로 보이네요. (예전에는 안 그랬던 거 같은데)

두 번째 결과를 보면 set(arr) 했던걸 다시 list(set(arr))을 통해서 {} => [] 괄호로 변경된 것을 볼 수 있습니다.
우리가 원했던 "중복 없는 리스트"를 가지고 올 수 있었습니다.

간단하죠? list(set(리스트))입니다.

파이썬 set에 대해서 더 자세히 알고 싶다면 [바로가기] 포스팅에 방문해주세요.

 

 

2. 파이썬 for 반복문을 이용해서 리스트 중복 제거


for 반복문을 이용해서 중복을 제거하는 방법은 아래와 같은 로직을 따릅니다.

1. 중복 제거된 값들이 들어갈 result 리스트를 하나 더 만들고
2. for 반복문에서 원래 리스트를 하나씩 돌면서
3. result 리스트에 값을 넣습니다. 이때 값을 넣으면서 result 리스트에 이미 있는 값인지 확인을 하는 작업을 거칩니다.

그것을 코드로 나타내면 아래와 같습니다.

arr = [6, 5, 6, 4, 4, 1, 1, 2, 3, 9, 8, 7, 9, 8, 7]
result = [] # 중복 제거된 값들이 들어갈 리스트

for value in arr:
    if value not in result:
        result.append(value)

print(result)

결과를 보면
for 반복문을 이용해서 중복을 제거하는 경우에
원래 arr 리스트에서 중복이 제거되었으며, 순서가 그대로 유지되는 것을 볼 수 있습니다.

 

 

3. 파이썬 dictionary를 이용해서 리스트 중복 제거 방법


딕셔너리 자료구조도 set 자료구조처럼 중복이 불가능한 규칙이 있습니다.

딕셔너리는 key, value로 데이터를 이루게 되는데 이 key 값이 중복 불가의 성질이 있습니다.
이 성질을 이용해서 list에서 중복을 제거할 수 있습니다.

딕셔너리의 메서드 중에서 dict.fromkeys( iterable)이라는 것이 있는데 
인자로 들어온 iterable 데이터를 key 값으로 해서 딕셔너리 자료형을 만들어 주는 작업을 하는 메서드입니다.

이 메서드를 이용해서 리스트의 값들을 딕셔너리의 key 값들로 만들면, 중복이 제거되겠죠?
그 중복이 제거된 key 값들을 다시 리스트로 변환하면 됩니다.

바로 코드로 보겠습니다.

arr = [6, 5, 6, 4, 4, 1, 1, 2, 3, 9, 8, 7, 9, 8, 7]

result1 = dict.fromkeys(arr) # 리스트 값들을 key 로 변경
print(result1)

result2 = list(result1) # list(dict.fromkeys(arr))
print(result2)

dict.fromkeys(리스트 자료형)을 이용해서 중복이 제거된 키 값들로 변환된 것을 볼 수 있습니다.

list(dict.fromkeys(리스트 자료형)을 이용해서 키 값으로 변환된 것들을 다시 리스트로 변환하는 것을 볼 수 있습니다.

이방법 또한 순서가 유지되는 것을 볼 수 있습니다. 

 

파이썬 딕셔너리에 대해서 더 자세히 알고 싶다면 [바로가기] 해당 포스팅에 방문 부탁드립니다.

 

이렇게 파이썬 리스트에서 중복을 제거하는 3가지 방법에 대해서 알아보았습니다.
감사합니다.

반응형