초보자를 위한 파이썬 정렬 마법: sorted() 함수 완벽 해부 mymaster, 2024년 06월 27일 데이터를 정렬하는 것은 프로그래밍에서 가장 기본적이면서도 중요한 작업 중 하나입니다. 여러분이 온라인 쇼핑몰에서 가격순으로 상품을 정렬하거나, 친구 목록을 이름순으로 보기 위해서도 정렬은 필수적입니다. 파이썬에서는 sorted() 함수를 이용하여 이러한 정렬 작업을 손쉽게 처리할 수 있습니다. 하지만 프로그래밍 초보자에게 sorted() 함수는 다소 낯설고 어렵게 느껴질 수 있습니다. 이 글에서는 파이썬의 sorted() 함수에 대해 초보자도 쉽게 이해할 수 있도록 다양한 측면에서 상세하게 설명하고자 합니다. 숫자, 문자열, 리스트 등 다양한 데이터 유형을 정렬하는 방법부터 시작하여, 함수의 작동 방식, 정렬 기준 설정, 고급 활용법까지 차근차근 알려드리겠습니다. 이 글을 끝까지 읽으신다면 sorted() 함수를 이용하여 여러분의 데이터를 자유자재로 정렬하고 관리할 수 있게 될 것입니다. 1. sorted() 함수란 무엇인가? sorted() 함수는 파이썬의 기본 내장 함수 중 하나로, 주어진 데이터를 특정 기준에 따라 정렬된 새로운 리스트를 생성하는 역할을 합니다. 즉, sorted() 함수는 원본 데이터를 변경하지 않고, 정렬된 새로운 리스트를 반환하는 것이 특징입니다. 예를 들어, 다음과 같이 숫자 리스트가 있다고 가정해봅시다. numbers = [3, 1, 4, 2, 5] 이 리스트를 sorted() 함수를 이용하여 오름차순으로 정렬하면 다음과 같습니다. sorted_numbers = sorted(numbers) print(sorted_numbers) # 출력: [1, 2, 3, 4, 5] 위 코드에서 sorted(numbers)는 정렬된 새로운 리스트를 생성하고, sorted_numbers 변수에 할당합니다. print(sorted_numbers)를 통해 정렬된 결과를 확인할 수 있습니다. 2. sorted() 함수: 다양한 데이터 유형 정렬하기 sorted() 함수는 숫자뿐만 아니라 문자열, 튜플, 리스트 등 다양한 데이터 유형을 정렬하는 데 사용될 수 있습니다. 2.1. 문자열 정렬하기 문자열 리스트를 sorted() 함수를 사용하여 정렬하면, 각 문자열의 사전적 순서(lexicographical order)에 따라 정렬됩니다. 즉, 알파벳 순서대로 정렬되며, 대문자는 소문자보다 앞에 위치하게 됩니다. fruits = ['apple', 'Orange', 'Banana', 'grape'] sorted_fruits = sorted(fruits) print(sorted_fruits) # 출력: ['Banana', 'Orange', 'apple', 'grape'] 2.2. 튜플 및 리스트 정렬하기 튜플이나 리스트 내부의 요소들을 기준으로 정렬하고 싶다면, key 매개변수를 사용하여 정렬 기준을 명시해야 합니다. 예를 들어, 학생들의 이름과 점수가 담긴 튜플 리스트를 점수순으로 정렬하려면 다음과 같이 할 수 있습니다. students = [('John', 80), ('Jane', 90), ('Mike', 75)] # 튜플의 두 번째 요소(점수)를 기준으로 정렬 sorted_students = sorted(students, key=lambda x: x[1]) print(sorted_students) # 출력: [('Mike', 75), ('John', 80), ('Jane', 90)] 위 코드에서 lambda 함수는 익명 함수를 정의하는 파이썬 문법입니다. lambda x: x[1]는 튜플 x를 입력받아 두 번째 요소(인덱스 1)인 점수를 반환하는 함수를 의미합니다. 따라서 sorted() 함수는 각 튜플의 점수를 기준으로 정렬을 수행하게 됩니다. 3. 정렬 기준 설정하기: key 매개변수 활용 앞서 살펴본 것처럼, sorted() 함수의 key 매개변수는 정렬 기준을 사용자 정의할 수 있도록 해줍니다. 3.1. 함수를 이용한 정렬 기준 설정 key 매개변수에는 함수를 전달할 수 있습니다. 이 함수는 각 요소를 입력받아 정렬 기준이 되는 값을 반환합니다. 예를 들어, 문자열의 길이를 기준으로 정렬하고 싶다면 다음과 같이 할 수 있습니다. words = ['apple', 'banana', 'cherry', 'date'] # 문자열의 길이를 기준으로 정렬 sorted_words = sorted(words, key=len) print(sorted_words) # 출력: ['date', 'apple', 'banana', 'cherry'] 3.2. 람다 함수를 이용한 간편한 정렬 기준 설정 lambda 함수를 사용하면 함수를 별도로 정의하지 않고도 key 매개변수 내에서 직접 정렬 기준을 정의할 수 있습니다. 이는 코드를 간결하게 만들어줍니다. 예를 들어, 리스트 내 튜플의 두 번째 요소를 기준으로 내림차순으로 정렬하고 싶다면 다음과 같이 할 수 있습니다. data = [(1, 5), (3, 2), (2, 4)] # 튜플의 두 번째 요소를 기준으로 내림차순 정렬 sorted_data = sorted(data, key=lambda x: x[1], reverse=True) print(sorted_data) # 출력: [(1, 5), (2, 4), (3, 2)] 4. 정렬 순서 변경하기: reverse 매개변수 활용 기본적으로 sorted() 함수는 오름차순으로 정렬을 수행합니다. 만약 내림차순으로 정렬하고 싶다면 reverse 매개변수를 True로 설정하면 됩니다. numbers = [3, 1, 4, 2, 5] # 내림차순으로 정렬 sorted_numbers = sorted(numbers, reverse=True) print(sorted_numbers) # 출력: [5, 4, 3, 2, 1] 5. sorted() 함수 활용의 다양한 예시 sorted() 함수는 다양한 상황에서 유용하게 활용될 수 있습니다. 몇 가지 예시를 통해 sorted() 함수의 활용도를 높여 보세요. 5.1. 사전 정렬하기 파이썬의 사전(dictionary)은 키-값 쌍으로 데이터를 저장하는 자료형입니다. sorted() 함수를 이용하여 사전의 키 또는 값을 기준으로 정렬된 리스트를 얻을 수 있습니다. my_dict = {'apple': 3, 'banana': 1, 'cherry': 2} # 키를 기준으로 정렬된 리스트 sorted_keys = sorted(my_dict.keys()) print(sorted_keys) # 출력: ['apple', 'banana', 'cherry'] # 값을 기준으로 정렬된 리스트 sorted_values = sorted(my_dict.values()) print(sorted_values) # 출력: [1, 2, 3] 5.2. 복잡한 자료구조 정렬하기 리스트 내에 리스트, 튜플, 사전 등 다양한 자료구조가 혼합된 경우에도 key 매개변수를 적절하게 활용하여 원하는 기준으로 정렬할 수 있습니다. data = [ {'name': 'John', 'age': 30, 'score': 85}, {'name': 'Jane', 'age': 25, 'score': 90}, {'name': 'Mike', 'age': 28, 'score': 78}, ] # 'score'를 기준으로 내림차순 정렬 sorted_data = sorted(data, key=lambda x: x['score'], reverse=True) print(sorted_data) # 출력: # [{'name': 'Jane', 'age': 25, 'score': 90}, # {'name': 'John', 'age': 30, 'score': 85}, # {'name': 'Mike', 'age': 28, 'score': 78}] 6. sorted() 함수와 sort() 메서드 비교: 차이점은 무엇일까요? 파이썬에서 정렬을 수행하는 방법은 sorted() 함수 외에도 sort() 메서드가 있습니다. sorted(iterable, key=None, reverse=False): 반복 가능한 객체(iterable)를 입력으로 받아 정렬된 새로운 리스트를 반환합니다. 원본 객체는 변경하지 않습니다. 리스트, 튜플, 문자열 등 다양한 자료형에 적용 가능합니다. list.sort(key=None, reverse=False): 리스트 자료형에서만 사용 가능한 메서드입니다. 리스트 자체를 정렬하며, 새로운 리스트를 생성하지 않습니다. 원본 리스트를 직접 변경합니다. 어떤 방법을 사용할지는 상황에 따라 다릅니다. 원본 데이터를 유지하면서 정렬된 새로운 리스트가 필요하다면 sorted() 함수를 사용합니다. 원본 리스트를 직접 변경하면서 정렬하고 싶다면 sort() 메서드를 사용합니다. 7. sorted() 함수 활용 시 주의사항 sorted() 함수는 정렬된 새로운 리스트를 생성하므로, 원본 데이터는 변경되지 않습니다. 만약 원본 데이터를 변경하고 싶다면, sort() 메서드를 사용하거나, sorted() 함수의 결과를 원본 변수에 다시 할당해야 합니다. key 매개변수에 지정된 함수는 하나의 인수만 받아야 합니다. 만약 여러 개의 기준으로 정렬해야 한다면, 튜플을 반환하는 함수를 사용할 수 있습니다. sorted() 함수는 안정 정렬(stable sort)을 보장합니다. 즉, 정렬 기준이 동일한 요소들의 상대적인 순서는 유지됩니다. 8. 결론: sorted() 함수 정복하기 지금까지 파이썬 sorted() 함수에 대해 자세히 알아보았습니다. 숫자, 문자열, 리스트, 튜플, 사전 등 다양한 데이터 유형을 정렬하는 방법부터, key, reverse 매개변수를 활용한 정렬 기준 및 순서 설정, sort() 메서드와의 비교, 그리고 실제 활용 예시까지 살펴보았습니다. sorted() 함수는 파이썬 프로그래밍에서 매우 유용한 함수 중 하나입니다. 이 글에서 다룬 내용을 바탕으로 sorted() 함수를 자유자재로 활용하여 데이터를 효율적으로 관리하고 처리할 수 있기를 바랍니다. 프로그래밍 학습에 꾸준히 노력하여 더욱 발전된 모습을 기대합니다! 목차 Toggle 1. sorted() 함수란 무엇인가?2. sorted() 함수: 다양한 데이터 유형 정렬하기3. 정렬 기준 설정하기: key 매개변수 활용4. 정렬 순서 변경하기: reverse 매개변수 활용5. sorted() 함수 활용의 다양한 예시6. sorted() 함수와 sort() 메서드 비교: 차이점은 무엇일까요?7. sorted() 함수 활용 시 주의사항8. 결론: sorted() 함수 정복하기 post