문자열 목록을 구두점(특수 문자)의 개수를 기준으로 정렬해야 하는 경우가 있습니다. 이럴 때는 문자열을 매개변수로 받는 함수를 정의하고, 리스트 컴프리헨션(list comprehension)과 'in' 연산자를 활용하면 간단하게 해결할 수 있습니다.
아래는 실제 구현 예시입니다.
예제 코드
from string import punctuation
def get_punctuation_count(my_str):
return len([element for element in my_str if element in punctuation])
my_list = ["python@%^", "is", "fun!", "to@#r", "@#$learn!"]
print("The list is :")
print(my_list)
my_list.sort(key = get_punctuation_count)
print("The result is :")
print(my_list)실행 결과
The list is : ['python@%^', 'is', 'fun!', 'to@#r', '@#$learn!'] The result is : ['is', 'fun!', 'to@#r', 'python@%^', '@#$learn!']
코드 설명
string모듈에서punctuation(구두점 집합)을 임포트하여 환경에 준비합니다. 여기에는!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~와 같은 특수 문자들이 포함되어 있습니다.get_punctuation_count라는 이름의 함수를 정의합니다. 이 함수는 문자열을 매개변수로 받으며, 리스트 컴프리헨션을 사용해 문자열의 각 문자를 순회합니다.순회 과정에서 각 문자가 구두점 집합(
punctuation)에 속하는지in연산자로 확인합니다.구두점에 해당하는 문자만 모은 리스트의 길이, 즉 구두점의 개수를 반환합니다.
함수 외부에서 문자열 목록을 정의하고, 콘솔에 출력하여 원본 상태를 확인합니다.
sort()메서드를 호출해 리스트를 정렬하며,key인자에 앞서 정의한 함수를 지정합니다. 이렇게 하면 각 문자열의 구두점 개수를 기준으로 오름차순 정렬이 수행됩니다.정렬된 최종 결과가 콘솔에 출력됩니다. 구두점이 없는
'is'가 맨 앞에, 구두점이 가장 많은'@#$learn!'이 맨 뒤에 위치하는 것을 확인할 수 있습니다.
참고 사항
sort() 메서드는 원본 리스트 자체를 변경하는 반면, 원본을 유지하고 싶다면 sorted(my_list, key=get_punctuation_count)를 사용하면 됩니다. 두 방식 모두 동일한 정렬 결과를 제공하므로, 상황에 맞게 선택하여 사용하시기 바랍니다.