문자열 리스트를 특정 부분 문자열(substring) 범위를 기준으로 정렬해야 하는 경우가 있습니다. 이럴 때 sort() 함수의 key 매개변수와 함께 리스트 슬라이싱을 활용하는 메서드를 정의하면 간단하게 해결할 수 있습니다.
예제
다음은 부분 문자열 범위를 기준으로 문자열을 정렬하는 방법을 보여주는 예제입니다.
def get_substring(my_string):
return my_string[i : j]
my_list = ["python", 'is', 'fun', 'to', 'learn']
print("The list is :")
print(my_list)
i, j = 1, 3
print("The value of i and j are :")
print(str(i)+ ',' +str(j))
my_list.sort(key=get_substring)
print("The result is :")
print(my_list)
출력 결과
The list is : ['python', 'is', 'fun', 'to', 'learn'] The value of i and j are : 1,3 The result is : ['learn', 'to', 'is', 'fun', 'python']
코드 설명
'get_substring'이라는 이름의 메서드를 정의하며, 이 메서드는 문자열을 매개변수로 받습니다.
리스트 슬라이싱(
my_string[i : j])을 사용하여 인덱스 i부터 j 직전까지의 부분 문자열을 반환합니다.메서드 외부에서 문자열로 구성된 리스트를 정의하고 콘솔에 출력합니다.
슬라이싱 범위를 결정하는 두 변수 i와 j의 값을 정의하고 콘솔에 표시합니다.
sort()함수 호출 시key매개변수에 앞서 정의한 메서드를 전달하여, 각 문자열의 부분 문자열을 비교 기준으로 삼아 리스트를 정렬합니다.정렬된 최종 결과가 콘솔에 출력됩니다.
정렬 원리 이해하기
이 예제에서 i=1, j=3이므로 각 문자열의 인덱스 1~2에 해당하는 부분 문자열이 비교 기준이 됩니다. 각 단어별로 추출되는 기준값은 다음과 같습니다.
'python' → 'yt'
'is' → 's'
'fun' → 'un'
'to' → 'o'
'learn' → 'ea'
이 기준값들을 사전순으로 정렬하면 'ea' < 'o' < 's' < 'un' < 'yt' 순서가 되므로, 최종 결과는 ['learn', 'to', 'is', 'fun', 'python']이 됩니다. 이처럼 key 매개변수에 커스텀 함수를 전달하면 다양한 조건으로 리스트를 자유롭게 정렬할 수 있습니다.