파이썬에서 문자열로 이루어진 목록을 각 문자열에 포함된 숫자 부분을 기준으로 정렬해야 할 때가 있습니다. 이럴 때는 정규 표현식(regular expression)과 'findall' 메서드를 활용하면 간단하게 해결할 수 있습니다.
예제
아래는 문자열 목록을 숫자 부분으로 정렬하는 방법을 보여주는 예제입니다.
import re
def my_num_sort(my_str):
return list(map(int, re.findall(r'\d+', my_str)))[0]
my_list = ["pyth42on", '14is', '32fun', '89to', 'lea78rn']
print("The list is :")
print(my_list)
my_list.sort(key=my_num_sort)
print("The result is :")
print(my_list)출력 결과
The list is : ['pyth42on', '14is', '32fun', '89to', 'lea78rn'] The result is : ['14is', '32fun', 'pyth42on', 'lea78rn', '89to']
코드 설명
필요한 패키지(정규 표현식 모듈인
re)를 환경에 임포트합니다.문자열을 매개변수로 받는 정렬용 함수
my_num_sort를 정의합니다.findall메서드를 사용하여 문자열에서 숫자 패턴(r'\d+')과 일치하는 부분을 모두 찾아냅니다.map메서드를 통해 찾은 숫자들을 정수형으로 변환한 뒤, 리스트로 변환합니다.리스트의 첫 번째 요소, 즉 문자열에서 발견된 첫 숫자를 함수의 반환값으로 돌려줍니다.
함수 외부에서 문자열 목록을 정의하고 콘솔에 출력합니다.
sort메서드의key인자에 앞서 정의한 함수를 지정하여, 목록을 숫자 값 기준으로 정렬합니다.정렬된 최종 결과를 콘솔에 출력합니다.
정리
이 방식의 핵심은 sort 메서드의 key 매개변수에 커스텀 함수를 전달하는 것입니다. 커스텀 함수가 각 문자열에서 숫자만 추출해 반환하면, 파이썬은 해당 숫자 값을 기준으로 목록을 오름차순으로 정렬합니다. 만약 내림차순 정렬이 필요하다면 sort(key=my_num_sort, reverse=True)처럼 reverse 옵션을 추가하면 됩니다.