문자열 목록을 대소문자 개수의 차이를 기준으로 정렬해야 할 때가 있습니다. 이럴 때는 문자열을 매개변수로 받는 함수를 하나 정의하면 됩니다. 이 함수 안에서는 리스트 컴프리헨션과 islower(), isupper() 메서드를 활용해 소문자와 대문자의 개수를 각각 세고, 두 값의 절대적인 차이를 반환합니다. 이 반환값을 정렬 키로 사용하면 원하는 기준대로 문자열을 손쉽게 정렬할 수 있습니다.
예제 코드
아래 예제를 통해 실제 동작 과정을 살펴보겠습니다.
def get_diff(my_string):
lower_count = len([ele for ele in my_string if ele.islower()])
upper_count = len([ele for ele in my_string if ele.isupper()])
return abs(lower_count - upper_count)
my_list = ["Abc", "Python", "best", "hello", "coders"]
print("The list is :")
print(my_list)
my_list.sort(key=get_diff)
print("Sorted Strings by case difference :")
print(my_list)
출력 결과
The list is :
['Abc', 'Python', 'best', 'hello', 'coders']
Sorted Strings by case difference :
['Abc', 'Python', 'best', 'coders', 'hello']
코드 설명
'get_diff'라는 이름의 함수를 정의하며, 이 함수는 문자열을 매개변수로 받습니다.
리스트 컴프리헨션과
islower(),isupper()메서드를 사용해 문자열 내 각 문자가 소문자인지 대문자인지 판별합니다.소문자 개수와 대문자 개수는 각각 별도의 변수에 저장됩니다.
두 변수 값의 절대 차이(
abs())를 계산해 함수의 반환값으로 돌려줍니다.함수 외부에서 문자열 리스트를 정의한 뒤 콘솔에 출력합니다.
sort()메서드의key인자에 앞서 정의한 함수를 전달하여 리스트를 정렬합니다.대소문자 차이가 작은 순서부터 정렬된 최종 리스트가 콘솔에 출력됩니다.