어제 오늘 내일

[Python 기초] "중복 제거와 정렬을 단 한 줄로!" 파이썬 리스트 완벽 정리 비법 본문

IT/Python

[Python 기초] "중복 제거와 정렬을 단 한 줄로!" 파이썬 리스트 완벽 정리 비법

hi.anna 2026. 4. 16. 08:43

데이터를 다루다 보면 "중복된 데이터를 없애고, 가나다순이나 크기순으로 깔끔하게 정렬해 줘!"라는 요구사항을 정말 많이 받게 됩니다.
이 두 가지 작업을 따로따로 하려면 코드가 길어지겠지만, 파이썬에서는 단 한 줄로 아주 우아하게 해결할 수 있습니다.

상황별로 골라 쓸 수 있는 완벽한 콤보 기술을 알아보겠습니다.


1. 실무 정석: sorted()set()의 환상적인 콜라보

가장 기본적이고 파이썬다운(Pythonic) 방법입니다.
중복을 없애는 set()과, 정렬된 새 리스트를 뱉어내는 sorted()를 양파 껍질처럼 겹쳐서 사용합니다.

📌 예제 코드: 기본 오름차순 (작은 것부터 / 가나다순)

raw_data = [5, 2, 9, 1, 5, 2, 3, 9]

# 1. 안쪽의 set(raw_data)가 먼저 실행되어 중복을 날립니다. -> {1, 2, 3, 5, 9}
# 2. 바깥쪽의 sorted()가 그 결과를 받아 정렬된 '리스트'로 만듭니다.
clean_sorted_data = sorted(set(raw_data))

print("원본:", raw_data)
print("중복 제거 + 정렬:", clean_sorted_data)
# 출력: [1, 2, 3, 5, 9]

2. 반대로 정렬하기: 내림차순 (큰 것부터)

만약 1등부터 꼴등 순서로, 혹은 알파벳 Z부터 A 순서로 정렬하고 싶다면 sorted() 함수의 마법의 옵션인 reverse=True를 덧붙여주면 됩니다.

📌 예제 코드: 내림차순 콤보

fruits = ["banana", "apple", "cherry", "apple", "banana"]

# set으로 중복을 없애고, sorted의 reverse=True로 역순 정렬을 지시합니다.
desc_fruits = sorted(set(fruits), reverse=True)

print("내림차순 정렬:", desc_fruits)
# 출력: ['cherry', 'banana', 'apple']

3. 응용편: 내 마음대로 정렬 기준 세우기 (key 옵션)

단순한 크기순이나 알파벳순이 아니라, "중복은 지우되, 글자 길이가 짧은 순서대로 정렬해 줘!"라는 복잡한 조건이 붙는다면 어떻게 할까요?
이때는 sorted()의 또 다른 옵션인 key를 활용합니다.

📌 예제 코드: 글자 길이(len) 순으로 정렬하기

words = ["apple", "kiwi", "banana", "fig", "kiwi", "apple"]

# 1. set(words)로 중복 제거 -> {'fig', 'banana', 'apple', 'kiwi'}
# 2. key=len 옵션을 주어 글자 수가 적은 단어부터 앞으로 오게 정렬
length_sorted_words = sorted(set(words), key=len)

print("글자 길이순 정렬:", length_sorted_words)
# 출력: ['fig', 'kiwi', 'apple', 'banana']

4. ⚠️ 잠깐! .sort()를 쓰면 안 되나요?

파이썬에는 리스트 원본 자체를 섞어버리는 .sort() 메서드도 있습니다. 이걸로 중복 제거와 정렬을 같이 하려면 코드를 두 줄로 나누어 써야 합니다.

data = [3, 1, 2, 3]

# 1. 먼저 중복을 지우고 다시 리스트로 바꿉니다.
data = list(set(data))

# 2. 그 리스트 자체의 정렬 기능을 호출합니다.
data.sort()

이 방식도 틀린 것은 아니지만, 앞서 배운 sorted(set()) 방식이 코드 한 줄로 끝나고 원본 데이터(raw data)도 훼손하지 않고 안전하게 보존할 수 있어서 실무에서는 압도적으로 선호됩니다.


📝 마치며

오늘의 핵심, 이 공식 딱 하나만 기억하시면 됩니다.

새_리스트 = sorted(set(원본_리스트))

어떤 지저분한 데이터를 만나더라도, 이 한 줄이면 중복 하나 없이 깔끔하게 각 잡힌 리스트를 얻어내실 수 있을 것입니다.

 

반응형
Comments