Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 고유 문자 개수를 기준으로 문자열 리스트 정렬하는 방법

문자열 리스트를 각 문자열이 가진 고유 문자(중복되지 않는 문자)의 개수를 기준으로 정렬해야 하는 경우가 종종 있습니다. 파이썬에서는 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()를 사용하면 원본 리스트는 그대로 유지된 채 새롭게 정렬된 리스트를 반환받을 수 있습니다.