문자열로 이루어진 리스트가 있을 때, 각 문자열의 길이를 기준으로 리스트를 정렬해야 하는 경우가 자주 있습니다. 즉, 짧은 문자열부터 긴 문자열 순서로 오름차순 정렬하는 것이 목표입니다.
Python에서는 직접 알고리즘을 구현할 수도 있지만, 내장 메서드인 sort() 또는 내장 함수인 sorted()에 key 인자를 활용하면 훨씬 간단하게 해결할 수 있습니다.
예시
입력:
strings = ["hafeez", "aslan", "honey", "appi"]
출력:
["appi", "aslan", "honey", "hafeez"]
위 예시처럼 문자열 길이가 4, 5, 5, 6 순서로 정렬된 결과를 얻을 수 있습니다. 이제 두 가지 방법을 하나씩 살펴보겠습니다.
방법 1: sorted() 함수 사용
sorted() 함수는 원본 리스트는 그대로 둔 채, 정렬된 새로운 리스트를 반환합니다. key 인자에 len 함수를 전달하면 문자열 길이를 기준으로 정렬됩니다.
알고리즘
1. 문자열 리스트를 초기화한다.
2. sorted(list, key=len) 함수에 리스트와 key를 전달하여 정렬한다.
문자열 길이 기준으로 정렬해야 하므로 len을 key로 지정한다.
결과 리스트를 새 변수에 저장한다.
3. 정렬된 리스트를 출력한다.
코드 예제
## 문자열 리스트 초기화
strings = ["hafeez", "aslan", "honey", "appi"]
## sorted() 함수와 key=len을 사용하여 정렬
sorted_list = list(sorted(strings, key=len))
## 정렬 후 결과 출력
print(sorted_list)
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
['appi', 'aslan', 'honey', 'hafeez']
방법 2: sort() 메서드 사용
sort() 메서드는 리스트 객체 자체에 적용되며, 원본 리스트를 제자리(in-place)에서 정렬하고 None을 반환합니다. 따라서 별도의 새 변수에 저장할 필요가 없습니다.
알고리즘
1. 문자열 리스트를 초기화한다.
2. list.sort(key=len) 메서드에 key를 전달하여 정렬한다.
문자열 길이 기준으로 정렬해야 하므로 len을 key로 지정한다.
sort() 메서드는 리스트를 제자리에서 정렬하므로 새 변수에 저장할 필요가 없다.
3. 정렬된 리스트를 출력한다.
코드 예제
## 문자열 리스트 초기화
strings = ["hafeez", "aslan", "honey", "appi"]
## sort(key) 메서드로 리스트를 제자리에서 정렬
strings.sort(key=len)
## 정렬 후 결과 출력
print(strings)
실행 결과
위 프로그램을 실행하면 동일한 결과가 출력됩니다.
['appi', 'aslan', 'honey', 'hafeez']
sorted() vs sort(): 어떤 것을 사용할까?
- sorted(): 원본 리스트를 유지해야 하거나, 정렬된 새 리스트가 필요할 때 적합합니다.
- sort(): 원본 리스트 자체를 변경해도 무방하고 메모리를 절약하고 싶을 때 적합합니다.
두 방법 모두 시간 복잡도는 O(n log n)으로 Timsort 알고리즘을 기반으로 하며, 성능 차이는 거의 없습니다.
마무리
이번 튜토리얼에서는 Python의 sorted() 함수와 sort() 메서드에 len>을 key로 전달하여 문자열 길이 기준으로 리스트를 정렬하는 두 가지 방법을 배웠습니다. 튜토리얼에 대해 궁금한 점이 있다면 댓글로 남겨주세요.