GDGoC/Python

[Python] Basic #03: 정렬

Opal1031 2026. 5. 6. 17:13

Python에서 정렬을 다루는 방법을 다룹니다.

 

리스트를 정렬할 때 자주 사용하는 sort()sorted(), 정렬 기준을 바꾸는 key, 간단한 함수를 만드는 lambda, 그리고 역순 정렬까지 함께 살펴보겠습니다.


1. sort()와 sorted()

sort()sorted()는 모두 데이터를 정렬할 때 사용합니다.

 

sort()

리스트 자체를 직접 정렬

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

nums.sort()

print(nums)  # [1, 2, 3, 5, 9]
  • list형의 method 중 하나이므로 list.sort()의 형태로 작성한다.

 

sorted()

정렬된 새로운 리스트를 반환

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

result = sorted(nums)

print(result)  # [1, 2, 3, 5, 9]
print(nums)    # [5, 2, 9, 1, 3]
  • 내장 함수이므로, sorted(list)의 형태로 작성한다. 

 

sort()는 원본을 바꾸기 때문에 이후에도 같은 리스트를 계속 사용할 계획이라면 주의해야 합니다.


2. key 활용

정렬할 때 값 자체가 아니라 특정 기준으로 정렬하고 싶을 때가 있습니다.

이럴 때 key 인자를 사용하면 됩니다.

 

key에는 정렬 기준이 되는 함수를 넣습니다.

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

result = sorted(words, key = len)

print(result)  # ['kiwi', 'pear', 'apple', 'banana']
students = [
    ("Alice", 90),
    ("Bob", 75),
    ("Charlie", 85)
]

result = sorted(students, key = lambda x: x[1])

print(result)  # [('Bob', 75), ('Charlie', 85), ('Alice', 90)]

 

key를 사용하면 문자열 길이, 숫자, 튜플의 특정 위치처럼 다양한 기준으로 정렬할 수 있습니다.


3. lambda 함수

lambda는 짧은 함수를 한 줄로 작성할 때 사용합니다.

정렬 기준이 간단할 때 lambda를 함께 쓰면 코드가 짧고 보기 쉬워집니다.

 

별도의 이름 없는 익명 함수를 즉석에서 정의하여 코드를 획기적으로 간결하게 만들고, 가독성을 높이며, 불필요한 함수 정의 과정을 줄여줍니다.

nums = [1, -4, 3, -2, 5]

result = sorted(nums, key = lambda x: abs(x))

print(result)  # [1, -2, 3, -4, 5]
points = [(3, 4), (1, 2), (5, 1)]

result = sorted(points, key = lambda x: x[0] + x[1])

print(result)  # [(1, 2), (3, 4), (5, 1)]

4. 역순 정렬

내림차순으로 정렬하고 싶을 때는 reverse = True를 사용합니다.

 

숫자뿐 아니라 문자열, 튜플 정렬에도 동일하게 적용할 수 있습니다.

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

result = sorted(nums, reverse = True)

print(result)  # [9, 5, 3, 2, 1]
words = ["banana", "apple", "kiwi", "pear"]

result = sorted(words, key = len, reverse = True)

print(result)  # ['banana', 'apple', 'pear', 'kiwi']

reverse = Truekey와 함께 자주 사용됩니다. 정렬 기준은 유지한 채 순서만 반대로 바꿀 수 있습니다.


5. 종합 예제

아래 예시는 학생 정보를 이름, 점수 기준으로 정리하는 간단한 예제입니다.

students = [
    {"name": "Alice", "score": 90},
    {"name": "Bob", "score": 75},
    {"name": "Charlie", "score": 85},
    {"name": "Dave", "score": 90}
]

# 점수 오름차순 정렬
by_score = sorted(students, key = lambda x: x["score"])
print(by_score)

# 점수가 같으면 이름 순으로 정렬
by_score_name = sorted(students, key = lambda x: (x["score"], x["name"]))
print(by_score_name)

# 점수 내림차순 정렬
desc_score = sorted(students, key = lambda x: x["score"], reverse = True)
print(desc_score)
  • 정렬 문제에서는 어떤 기준으로 정렬할지 먼저 정하고, 그 기준을 key와 lambda로 표현하는 습관을 들이면 좋습니다.

6. 자주 하는 실수/주의점

sort()는 원본 리스트를 직접 바꾸고, sorted()는 새 리스트를 만듭니다.
key에는 정렬 기준을 반환하는 함수를 넣어야 합니다.
reverse = True는 내림차순 정렬을 의미합니다.
• 문자열 숫자를 정렬할 때는 실제 숫자 기준인지 문자 기준인지 확인해야 합니다.


7. 종합 요약

sort(): 리스트 자체를 정렬
sorted(): 정렬된 새 리스트 반환
key: 정렬 기준 지정
lambda: 간단한 정렬 기준을 짧게 작성
reverse = True: 역순 정렬