문자열 리스트를 각 문자열이 가진 고유 문자(중복되지 않는 문자)의 개수를 기준으로 정렬해야 하는 경우가 종종 있습니다. 파이썬에서는 set, list, len을 활용한 정렬 키 함수를 정의하여 이 문제를 아주 간단하게 해결할 수 있습니다.
예제 코드
아래는 실제 구현 예시입니다.
def my_sort_func(my_elem):
return len(list(set(my_elem)))
my_list = ['python', "Will", "Hi", "how", 'fun', 'learn', 'code']
print("The list is : ")
print(my_list)
my_list.sort(key = my_sort_func)
print("The result is :")
print(my_list)출력 결과
The list is : ['python', 'Will', 'Hi', 'how', 'fun', 'learn', 'code'] The result is : ['Hi', 'Will', 'how', 'fun', 'code', 'learn', 'python']
코드 설명
my_sort_func라는 이름의 함수가 정의되며, 이 함수는 하나의 문자열을 매개변수로 받습니다.함수 내부에서는 먼저
set을 사용해 문자열에서 중복된 문자를 제거하고,list로 변환한 뒤len으로 고유 문자의 개수를 계산하여 반환합니다.함수 외부에서는 여러 문자열을 담은 리스트가 정의되며, 콘솔에 출력됩니다.
sort()메서드의key인자에 앞서 정의한 함수를 지정하면, 각 요소가 고유 문자 개수를 기준으로 오름차순 정렬됩니다.정렬된 최종 결과가 콘솔에 출력됩니다.
람다 표현식으로 더 간결하게 작성하기
별도의 함수를 정의하지 않고 람다(lambda) 표현식을 사용하면 코드를 한 줄로 줄일 수 있습니다.
my_list.sort(key=lambda x: len(set(x)))
참고로 sort()는 원본 리스트 자체를 변경하는 반면, sorted(my_list, key=lambda x: len(set(x)))처럼 sorted()를 사용하면 원본 리스트는 그대로 유지된 채 새롭게 정렬된 리스트를 반환받을 수 있습니다.