Code Note

[python] list에서 중복 원소 제거(duplicate elements)

Woomii 2023. 2. 10. 02:27
728x90
반응형

안녕하세요! 

오늘도 갑자기 코드를 쓰다가 궁금해진 내용이 있어 남기고자 글을 적어봅니다.

 

파이썬에서 리스트 형태의 자료를 자주 사용하는데요, 여러 리스트를 합치거나 하다 보면 리스트에 중복된 원소가 있더라구요. 그동안은 항상 list를 set으로 바꾸어 주었는데, 

set(집합) 형태의 자료형은 중복 원소를 허용하지 않기 때문에 자동으로 중복된 원소를 제거 해주거든요.

 

하지만 set 형태의 자료형은 구성 원소의 순서를 유지하기 어렵다는 문제가 있었습니다.

그래서 오늘도 새로운 선생님인 ChatGPT 선생님의 도움을 살짝 받아 보았습니다.

 

영어 실력이 부끄럽지만 제 질문과 답변은 아래 이미지와 같습니다.

첫 답변

 

그렇지만 위의 이미지에서 나온 답변은 순서를 유지하는 경우와 유지하지 않는 경우가 따로 기재되 있어 좀 더 깔끔하게 써주실수 없는지 다시 물어 보았습니다.

 

설명을 한국어로 옮기자면 이런 내용입니다.

중복을 제거하는 파이썬 함수를 만들 때, 순서를 유지할지 여부를 결정할 수 있습니다.
1. 순서 유지 : 새 리스트를 만들 때, 중복된 원소가 없을 때만 원소를 추가
2. 순서 유지하지 않음 : 원소를 집합(set)으로 변환하고, 다시 리스트로 변환하여 중복 제거

위의 코드에서 remove_duplicates 함수는 두 개의 인수를 받습니다 : 처리할 my_list, 순서 유지 여부를 나타내는 불린값인 ordered입니다. ordered=True인 경우, 원래 리스트를 반복하면서 새 리스트에서만 유일한 원소를 추가하게 됩니다.

 

 

 

def remove_duplicates(my_list, ordered=False):
    if ordered:
        new_list = []
        for item in my_list:
            if item not in new_list:
                new_list.append(item)
        return new_list
    else:
        return list(set(my_list))

my_list = [100, 1, 2, 3, 1, 2, 5, 6, 7, 8, 6, 9, 10]
new_list_ordered = remove_duplicates(my_list, ordered=True)
print('new_list_ordered : ', new_list_ordered)
new_list_unordered = remove_duplicates(my_list, ordered=False)
print('new_list_unordered : ', new_list_unordered)

실행 결과는 다음과 같이 'new_list_ordered'는 기존 순서를 유지한 채 중복을 제거하였고(100이 맨앞에 있음),

'new_list_unordered'는 순서는 고려하지 않고, 100이 중간에 들어간 것을 볼 수 있습니다.

반응형