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

파이썬으로 구두점 개수를 기준으로 문자열 정렬하는 방법

문자열 목록을 구두점(특수 문자)의 개수를 기준으로 정렬해야 하는 경우가 있습니다. 이럴 때는 문자열을 매개변수로 받는 함수를 정의하고, 리스트 컴프리헨션(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)를 사용하면 됩니다. 두 방식 모두 동일한 정렬 결과를 제공하므로, 상황에 맞게 선택하여 사용하시기 바랍니다.