| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- ArrayList
- junit5
- 배열
- junit
- list
- CSS
- 단위테스트
- vscode
- Visual Studio Code
- IntelliJ
- 정규식
- js
- SpringBoot
- javascript
- input
- math
- Array
- html
- java테스트
- 자바스크립트
- Java
- string
- 자바문법
- HashMap
- 스프링부트
- 인텔리제이
- 문자열
- Eclipse
- 자바
- 테스트자동화
- Today
- Total
어제 오늘 내일
[Python 기초] "뒤죽박죽 데이터 깔끔하게 줄 세우기!" 파이썬 리스트 정렬 (sort vs sorted) 본문
쇼핑몰에서 '가격 낮은 순', '평점 높은 순'으로 상품을 보거나, 학교에서 학생들의 시험 점수를 '1등부터 꼴등까지' 나열할 때 우리는 정렬(Sorting)을 사용합니다.
파이썬은 아주 강력하고 직관적인 정렬 기능을 제공합니다. 오늘은 가장 많이 쓰이는 두 가지 마법의 단어, sort()와 sorted(), 그리고 내가 원하는 기준대로 정렬하는 key 옵션에 대해 알아보겠습니다.
1. 원본을 직접 줄 세우기: .sort()
첫 번째 방법은 리스트가 가지고 있는 자체 기능인 .sort() 메서드를 사용하는 것입니다.
이 방법을 사용하면 원본 리스트 자체가 정렬된 상태로 영구적으로 바뀌게 됩니다.
📌 예제 코드: 오름차순과 내림차순 정렬
# 1. 숫자 오름차순 정렬 (작은 수 -> 큰 수)
scores = [85, 100, 70, 95, 60]
scores.sort()
print("오름차순:", scores)
# 출력: 오름차순: [60, 70, 85, 95, 100]
# 2. 숫자 내림차순 정렬 (큰 수 -> 작은 수)
# 괄호 안에 reverse=True (반대로 할게: 참) 옵션을 넣어줍니다!
scores.sort(reverse=True)
print("내림차순:", scores)
# 출력: 내림차순: [100, 95, 85, 70, 60]
# 3. 문자열 정렬 (알파벳순, 가나다순)
fruits = ["banana", "apple", "cherry", "사과", "바나나"]
fruits.sort()
print("문자열 정렬:", fruits)
# 출력: 문자열 정렬: ['apple', 'banana', 'cherry', '바나나', '사과']
# (참고: 영어 대문자 -> 영어 소문자 -> 한글 순서로 정렬됩니다.)
⚠️ 주의할 점: scores.sort()는 원본을 바꿀 뿐, 결과값을 밖으로 뱉어내지(return) 않습니다. 따라서 new_list = scores.sort()라고 쓰면 new_list에는 아무것도 없는 None이 들어가 버리니 주의하세요!
2. 원본은 놔두고, 새로운 리스트 만들기: sorted()
데이터 분석을 하다 보면 원본 데이터(예: 수집한 시간순 데이터)는 그대로 보존해야 할 때가 많습니다. 이때는 원본을 건드리지 않고, 정렬된 '새로운 리스트'를 복사해서 만들어주는 sorted() 파이썬 내장 함수를 사용합니다.
📌 예제 코드: 안전하게 정렬하기
original_numbers = [3, 1, 4, 2, 5]
# 원본은 그대로 두고, 정렬된 새 리스트를 변수에 담습니다.
sorted_numbers = sorted(original_numbers)
print("원본 리스트:", original_numbers)
print("새로운 리스트:", sorted_numbers)
실행 결과:
원본 리스트: [3, 1, 4, 2, 5]
새로운 리스트: [1, 2, 3, 4, 5]
sorted() 함수 역시 내림차순을 원한다면 괄호 안에 reverse=True를 추가해주면 됩니다. (예: sorted(numbers, reverse=True))
3. "내 맘대로 줄 세울래!" 마법의 key 옵션 (실전용)
단순히 가나다순, 크기순이 아니라 "글자 길이가 짧은 순서대로 정렬해 줘!" 라거나, "이름과 점수가 같이 있는데, 점수를 기준으로 정렬해 줘!"라고 디테일한 명령을 내리고 싶을 때가 있습니다.
이때 사용하는 것이 바로 key 옵션입니다. 정렬의 기준(Key)이 될 함수를 지정해 주는 아주 강력한 기능입니다.
📌 예제 코드: 글자 길이로 정렬하기
파이썬의 길이를 재는 내장 함수인 len을 기준으로 삼아보겠습니다.
words = ["apple", "kiwi", "banana", "fig", "strawberry"]
# 기준(key)을 글자 길이(len)로 설정합니다.
# 알파벳 순서가 아니라 짧은 단어부터 긴 단어 순으로 정렬됩니다.
words.sort(key=len)
print("글자 길이순 정렬:", words)
# 출력: 글자 길이순 정렬: ['fig', 'kiwi', 'apple', 'banana', 'strawberry']
📌 예제 코드: 복잡한 데이터 정렬하기 (람다 함수 활용)
이전에 배운 람다(lambda) 함수와 결합하면 그 위력이 배가 됩니다. 학생의 이름과 점수가 묶여있는 리스트를 '점수' 기준으로 정렬해 보겠습니다.
# [이름, 점수] 로 이루어진 리스트
students = [
["홍길동", 85],
["김철수", 100],
["이영희", 92]
]
# 그냥 sort()를 하면 첫 번째 데이터인 '이름(가나다순)'으로 정렬되어 버립니다.
# "x가 들어오면, x의 1번 인덱스(즉, 점수)를 기준으로 정렬해라!"
students.sort(key=lambda x: x[1], reverse=True)
print("점수 높은 순 정렬:")
for student in students:
print(student)
실행 결과:
점수 높은 순 정렬:
['김철수', 100]
['이영희', 92]
['홍길동', 85]
📝 마치며
리스트 정렬의 핵심 요약입니다.
.sort(): 원본 리스트를 직접 정렬해 버린다. (메모리 절약)sorted(): 원본은 안전하게 보존하고 정렬된 새 리스트를 만든다. (안전함)reverse=True: 내림차순(큰 것부터)으로 정렬할 때 쓰는 마법의 옵션.key=함수: 정렬 기준을 내 마음대로 커스텀할 때 사용한다. (lambda와 찰떡궁합!)
이 4가지만 알고 계시면 파이썬에서 만나는 어떤 데이터든 예쁘게 줄 세우실 수 있습니다.
'IT > Python' 카테고리의 다른 글
| [Python 기초] "중복 제거와 정렬을 단 한 줄로!" 파이썬 리스트 완벽 정리 비법 (1) | 2026.04.16 |
|---|---|
| [Python 기초] "똑같은 데이터 다 나와!" 파이썬 리스트 중복 제거 완벽 가이드 (순서 유지 vs 순서 무시) (0) | 2026.04.16 |
| [Python 실전 보너스] 18. "100만 줄 엑셀도 1초 컷!" 데이터 분석의 끝판왕, 판다스(Pandas) 찍어 먹기 (2) | 2026.04.15 |
| [Python 실전] 17. "크롤링보다 100배 쉽고 정확하다!" 공공데이터 API 연동과 JSON 다루기 (1) | 2026.04.14 |
| [Python 실전] 16. "엑셀 노가다 완벽 해방!" openpyxl로 파이썬에서 엑셀 다루기 (0) | 2026.04.14 |