들어가며
리스트는 파이썬에서 자주 사용되는 데이터 구조로, 다양한 상황에서 정렬이 필요합니다. 파이썬은 내장된 기능을 통해 리스트를 쉽게 정렬할 수 있는 여러 방법을 제공하고 있는데요. 이 글에서는 다양한 상황에서 사용할 수 있는 리스트 정렬 방법에 대해 알아보겠습니다.
1. 기본 정렬
가장 간단한 정렬 방법은 sort() 메서드와 sorted() 함수를 사용하는 것입니다. 이 두 가지 방법은 기본적으로 오름차순으로 정렬합니다.
sort() 메서드
sort() 메서드는 리스트 자체를 정렬하며, 리스트를 수정합니다.
numbers = [4, 2, 9, 1, 5, 6]
numbers.sort()
print(numbers) # [1, 2, 4, 5, 6, 9]
sorted() 함수
sorted() 함수는 리스트를 정렬한 새로운 리스트를 반환하며, 원본 리스트는 변경되지 않습니다.
numbers = [4, 2, 9, 1, 5, 6]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # [1, 2, 4, 5, 6, 9]
print(numbers) # [4, 2, 9, 1, 5, 6]
2. 내림차순 정렬
리스트를 내림차순으로 정렬하려면 sort() 메서드와 sorted() 함수에 reverse=True 매개변수를 사용하면 됩니다.
sort() 메서드
numbers = [4, 2, 9, 1, 5, 6]
numbers.sort(reverse=True)
print(numbers) # [9, 6, 5, 4, 2, 1]
sorted() 함수
numbers = [4, 2, 9, 1, 5, 6]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers) # [9, 6, 5, 4, 2, 1]
3. 키를 사용한 정렬
리스트의 요소가 복잡한 구조(예: 튜플, 딕셔너리 등)를 가지는 경우, 특정 키를 기준으로 정렬할 수 있습니다. 이 때 key 매개변수를 사용합니다.
튜플의 특정 요소를 기준으로 정렬
students = [("John", 25), ("Jane", 22), ("Dave", 27)]
students.sort(key=lambda student: student[1])
print(students) # [('Jane', 22), ('John', 25), ('Dave', 27)]
딕셔너리의 값 기준 정렬
students = [{"name": "John", "age": 25}, {"name": "Jane", "age": 22}, {"name": "Dave", "age": 27}]
students.sort(key=lambda student: student["age"])
print(students) # [{'name': 'Jane', 'age': 22}, {'name': 'John', 'age': 25}, {'name': 'Dave', 'age': 27}]
4. 사용자 정의 정렬 함수
복잡한 정렬 기준이 필요한 경우, 사용자 정의 함수를 key 매개변수로 사용할 수 있습니다.
사용자 정의 함수 사용 예제
def custom_sort(student):
return student[1], student[0] # 나이 우선, 이름 차선
students = [("John", 25), ("Jane", 22), ("Dave", 27)]
students.sort(key=custom_sort)
print(students) # [('Jane', 22), ('John', 25), ('Dave', 27)]
5. 다중 기준 정렬
여러 기준으로 정렬해야 하는 경우, 튜플을 반환하는 key 함수를 사용하면 됩니다. 첫 번째 요소를 기준으로 정렬하고, 두 번째 요소로 차순위를 정합니다.
students = [("John", "A"), ("Jane", "B"), ("Dave", "A"), ("Zack", "B")]
students.sort(key=lambda student: (student[1], student[0]))
print(students) # [('John', 'A'), ('Dave', 'A'), ('Jane', 'B'), ('Zack', 'B')]
6. 대소문자 구분 없이 정렬
문자열 리스트를 정렬할 때 대소문자를 구분하지 않도록 하려면 str.lower를 key로 사용할 수 있습니다.
words = ["banana", "Apple", "orange", "apple"]
words.sort(key=str.lower)
print(words) # ['Apple', 'apple', 'banana', 'orange']
마무리
파이썬은 다양한 상황에서 리스트를 정렬할 수 있는 강력하고 유연한 기능을 제공합니다. sort() 메서드와 sorted() 함수를 기본으로, key 매개변수를 사용한 사용자 정의 정렬, 다중 기준 정렬, 대소문자 구분 없는 정렬 등을 통해 원하는 형태로 데이터를 정렬할 수 있습니다. 이를 잘 활용한다면 데이터 처리와 분석 작업이 훨씬 수월해질 것입니다.