본문 바로가기
Python/python

파이썬 sorted() 함수를 활용하여 리스트 정렬하기

by 노마드 산코디 2023. 10. 10.
728x90

안녕하세요. 이번 포스팅에서는 파이썬의 sorted() 함수에 대한 내용을 주제로 정리해 보려고 합니다. 프로그래밍에서 데이터를 정렬하는 것은 매우 중요한 작업 중 하나로, 이를 위해 파이썬에서 제공하는 sorted() 함수를 자세히 알아보겠습니다.








1. sorted() 함수란?

sorted() 함수는 파이썬에서 제공하는 내장 함수 중 하나로, 주어진 시퀀스(리스트, 튜플, 문자열)를 정렬하여 새로운 정렬된 리스트를 반환하는 함수입니다. 이 함수를 사용하면 데이터를 원하는 순서로 정렬할 수 있습니다.

기본적으로 sorted() 함수는 오름차순(ascending)으로 정렬하며, 정렬된 결과를 새로운 리스트로 반환합니다. 원본 데이터는 변경되지 않습니다. 필요에 따라 내림차순(descending)으로 정렬할 수도 있습니다.

sorted() 함수는 다양한 데이터 타입을 처리할 수 있으며, 사용자 정의 비교 함수(key function)를 활용하여 정렬의 기준을 설정할 수 있습니다. 이 함수는 안정적인 정렬을 지원하며, 동일한 값의 원소들의 상대적인 순서를 유지합니다.


예시 코드

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = sorted(numbers)  # 오름차순으로 정렬
print(sorted_numbers)


위의 코드는 numbers 리스트를 오름차순으로 정렬한 후 sorted_numbers에 저장하고, 정렬된 결과를 출력합니다.


 

 

 


2. sorted() 함수의 정렬 방식

sorted() 함수는 기본적으로 오름차순(ascending)으로 정렬을 수행합니다. 즉, 작은 값에서 큰 값으로 정렬됩니다. 파이썬은 내장 함수인 sorted()를 사용하여 정렬을 수행할 때 다음과 같은 정렬 방식을 따릅니다:

  • 오름차순 정렬 (Ascending Order)
    기본 정렬 방식으로, 작은 값부터 큰 값 순서로 정렬합니다.

  • 내림차순 정렬 (Descending Order)
    reverse=True 옵션을 사용하여 큰 값부터 작은 값 순서로 정렬할 수 있습니다.


예시 코드

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]

# 오름차순 정렬
sorted_numbers_asc = sorted(numbers)
print(sorted_numbers_asc)  # 출력: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

# 내림차순 정렬
sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc)  # 출력: [9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]

 

sorted() 함수의 reverse 매개변수를 이용하여 원하는 정렬 방식을 설정할 수 있으므로, 필요에 따라 사용하면 됩니다.







3. sorted() 함수의 제너레이터 정렬

sorted() 함수를 사용하여 제너레이터(generator)로부터 정렬하는 방법은 매우 유용하며, 메모리를 효율적으로 사용할 수 있습니다. 제너레이터는 모든 데이터를 한 번에 메모리에 로드하지 않고 하나씩 생성하므로 대용량 데이터를 처리할 때 유용합니다.

  • 제너레이터 생성
    먼저 제너레이터를 생성하거나 가져옵니다. 제너레이터는 yield 키워드를 사용하여 데이터를 한 번에 하나씩 생성합니다.

  • sorted() 함수 활용
    sorted()
     함수를 호출할 때 제너레이터를 인자로 전달합니다.


  • 결과 반복
    sorted()
     함수는 정렬된 결과를 새로운 이터러블(iterable)로 반환합니다. 이 결과를 이터레이션(iteration)하면서 정렬된 데이터를 하나씩 가져올 수 있습니다.


예시 코드

# 제너레이터 함수 정의
def generate_numbers():
    yield 3
    yield 1
    yield 4
    yield 1
    yield 5

# 제너레이터 생성
numbers_generator = generate_numbers()

# 제너레이터로부터 정렬된 결과 얻기
sorted_numbers = sorted(numbers_generator)

# 결과 출력
for num in sorted_numbers:
    print(num)


위의 방법을 사용하면 제너레이터를 활용하여 대용량 데이터를 효율적으로 정렬할 수 있습니다.








4. sorted() 함수의 활용 사례

파이썬의 sorted() 함수는 다양한 활용 사례가 있습니다. 이 함수는 리스트, 튜플, 제너레이터 등 다양한 데이터 구조를 정렬할 수 있으며, 사용자 정의 정렬 기준을 설정할 수 있어 다양한 상황에서 유용하게 활용됩니다.



1. 기본 정렬
sorted() 함수를 사용하여 숫자 리스트나 문자열 리스트 등을 기본적인 오름차순 정렬로 정렬할 수 있습니다.

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = sorted(numbers)



2. 내림차순 정렬
sorted() 함수에 reverse=True 옵션을 사용하여 내림차순으로 정렬할 수 있습니다.

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers_desc = sorted(numbers, reverse=True)



3. 사용자 정의 정렬 기준
key 매개변수를 사용하여 사용자 정의 정렬 기준을 설정할 수 있습니다. 예를 들어, 문자열 리스트를 길이에 따라 정렬할 수 있습니다.

words = ["apple", "banana", "cherry", "date"]
sorted_words = sorted(words, key=len)



4. 복잡한 객체 정렬
객체의 특정 속성을 기준으로 정렬할 수 있습니다. 클래스 객체의 리스트를 정렬할 때 유용합니다.

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

students = [Student("Alice", 22), Student("Bob", 19), Student("Charlie", 21)]
sorted_students = sorted(students, key=lambda x: x.age)



5. dictionary 정렬
딕셔너리의 키(key) 또는 값(value)에 따라 정렬할 수 있습니다.

data = {"apple": 3, "banana": 1, "cherry": 2}
sorted_data_by_value = dict(sorted(data.items(), key=lambda x: x[1]))



6. 제너레이터 정렬
제너레이터로부터 데이터를 생성하면서 sorted() 함수를 사용하여 정렬할 수 있습니다. 대용량 데이터 처리에 유용합니다.

def generate_numbers():
    yield 3
    yield 1
    yield 4
    yield 1
    yield 5

numbers_generator = generate_numbers()
sorted_numbers = sorted(numbers_generator)



7. 중복 제거
중복된 값을 가진 리스트에서 중복을 제거하고 정렬된 결과를 얻을 수 있습니다.

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
unique_sorted_numbers = sorted(set(numbers))




sorted() 함수는 다양한 활용 사례에 맞게 활용할 수 있으며, 데이터 정렬 및 처리에 유용한 파이썬의 강력한 기능 중 하나입니다.








5. sorted() 함수 사용시 주의사항



1. 원본 변경하지 않음
sorted() 함수는 정렬된 결과를 새로운 리스트로 반환하며, 원본 리스트를 변경하지 않습니다. 따라서 정렬된 결과를 사용하려면 새로운 변수에 할당해야 합니다.

numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers)  # numbers는 변경되지 않음



2. 문자열과 숫자 혼합 사용
sorted() 함수를 사용할 때 주의해야 할 점 중 하나는 문자열과 숫자가 혼합된 리스트를 정렬할 때입니다. 기본적으로 파이썬은 문자열과 숫자를 함께 정렬할 수 없습니다. 이 경우 key 매개변수를 사용하여 정렬 기준을 설정해야 합니다.

mixed_data = ["apple", 3, "banana", 1, "cherry", 2]
sorted_mixed_data = sorted(mixed_data, key=lambda x: str(x))  # 숫자를 문자열로 변환하여 정렬



3. 복잡한 객체 정렬 시 key 사용
복잡한 객체를 정렬할 때 key 매개변수를 사용하여 정렬 기준을 설정해야 합니다. 기본적으로 파이썬은 객체의 주소를 기준으로 정렬하므로 사용자 지정 기준이 필요합니다.

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

students = [Student("Alice", 22), Student("Bob", 19), Student("Charlie", 21)]
sorted_students = sorted(students, key=lambda x: x.age)



4. 제너레이터 활용 시 주의
sorted() 함수를 제너레이터(generator)에 적용할 때는 주의해야 합니다. 제너레이터는 한 번만 이터레이션(iteration)될 수 있으므로 결과를 반복해서 사용하려면 정렬된 결과를 리스트로 변환해야 합니다.

def generate_numbers():
    yield 3
    yield 1
    yield 4
    yield 1
    yield 5

numbers_generator = generate_numbers()
sorted_numbers = sorted(numbers_generator)  # 제너레이터는 이후에 재사용할 수 없음
sorted_numbers_list = list(sorted_numbers)  # 정렬된 결과를 리스트로 변환하여 사용




sorted() 함수를 사용할 때 이러한 주의사항을 염두에 두면 데이터를 올바르게 정렬하고 처리할 수 있습니다.









최종 정리

오늘은 파이썬 sorted() 함수에 대한 내용을 주제로 정리해 보았습니다. sorted() 함수는 데이터 정렬에 유용한 도구로, 다양한 상황에서 활용할 수 있습니다. 이 함수를 사용하면 데이터를 원하는 방식으로 정렬할 수 있으며, 정렬된 결과를 새로운 리스트로 반환하여 원본 데이터를 변경하지 않습니다. 정렬된 데이터를 사용하기 위해서는 새로운 변수에 할당하여 활용하면 됩니다.

또한, key 매개변수를 활용하여 정렬 기준을 사용자 정의할 수 있으며, 복잡한 객체의 정렬에도 적용할 수 있습니다. 하지만 주의해야 할 점은 제너레이터에 sorted() 함수를 적용할 때는 결과를 리스트로 변환하여 재사용해야 한다는 것입니다.

이러한 특징과 주의사항을 이해하고 활용하면 데이터 정렬 작업을 보다 효과적으로 수행할 수 있습니다. 파이썬의 sorted() 함수는 프로그래밍에서 빈번하게 사용되며, 데이터 처리 및 분석에 필수적인 도구 중 하나입니다.

감사합니다.

728x90
반응형